如何使用队列设置高,低和中优先级电子邮件?

时间:2017-02-19 08:44:22

标签: laravel laravel-5.3 laravel-5.4

我正在学习 Job dispatching from here

问题

我读到每个连接都有队列参数,它告诉队列名称。问题是:如何设置发送低或中或高优先级电子邮件的优先级?

Cmd提示

我正在使用命令: php artisan queue:listen 来处理作业。

我尝试了什么?

php artisan queue:work --queue=high,default

但是如果连接的队列参数值不高,则此代码不起作用

默认队列驱动程序

'default' => env('QUEUE_DRIVER', 'database'),

队列连接

'connections' => [

    'Register' => [
        'driver'        =>  'database',
        'table'         =>  'tbljobs',
        'queue'         =>  'low',
        'retry_after'   =>  5,
    ],

    'ForgotPassword' => [
        'driver'        =>  'database',
        'table'         =>  'tbljobs',
        'queue'         =>  'low',
        'retry_after'   =>  5,
    ],

],

.ENV

QUEUE_DRIVER=Register

注册电子邮件的控制器代码

$job = (new SendActivationEmail($Data))
        ->onConnection('Register');
dispatch($job);

重置密码的控制器代码

$job = (new SendResetPasswordEmail($this->tokens->create($user), $user))
        ->onConnection('ForgotPassword');
dispatch($job);

4 个答案:

答案 0 :(得分:9)

记下 Connections Vs.队列Laravel's queue documentation中注明,除了SQS之外,它适用于所有队列驱动程序。

  

在开始使用Laravel队列之前,重要的是   理解"连接之间的区别"和"队列"。在你的   config / queue.php配置文件,有连接   配置选项。此选项定义与a的特定连接   后端服务,如Amazon SQS,Beanstalk或Redis。但是,任何   给定队列连接可能有多个"队列"可以这么想   作为不同的堆栈或成堆的排队工作。

     

请注意队列中的每个连接配置示例   配置文件包含队列属性。这是默认值   将作业发送到给定时将调度作业的队列   连接。换句话说,如果您没有明确地派遣工作   定义应该分派到哪个队列,作业将是   放置在队列属性中定义的队列中   连接配置:

实际上,您将在config/queues.php文件中注册一个队列连接,如果未提供另一个队列,default参数将只是默认调度作业的队列。

维塔利上面的回答是解决问题的正确方法(合并到一个默认队列的单一连接),然后调整你的工作,以便在需要时发送到不同的队列。这是关于队列配置如何工作的一些重要的(我认为)上下文。

答案 1 :(得分:4)

您应该在Locale文件中定义两个队列。比如,一个名字为" high"而另一个"低"。

然后,您可以根据需要向他们发送作业,如下所示:

config/queue.php

注意:$job = (new SendResetPasswordEmail($this->tokens->create($user), $user)) ->onConnection('ForgotPassword'); dispatch($job)->onQueue('high'));

最后,您将运行: ->onQueue('high')

这将启动一名工人,该工人将处理" high"在进入"低"

的工作之前排队

答案 2 :(得分:4)

试试这个

login/logout

然后

php artisan queue:listen --queue = Register-high,Register-low

答案 3 :(得分:0)

队列优先级在https://laravel.com/docs/5.7/queues#queue-priorities中进行了说明。 您仅需要“将逗号分隔的队列名称列表传递给work命令。”

如文档所述:

state, shortname, name, population, attirbute.capture_date, attirbute.spirit_code, attirbute.value florida, FL ,Dade, 12345 , 2020-0-29 , TRLQR , 1 florida, FL ,Dade, 12345 , 2020-0-29 , HAVPN , 57000 florida, FL ,Broward, 40000 , 2020-0-29 , GMSTP , 14 florida, FL ,Broward, 40000 , 2020-0-29 , GWTPN , 11212 florida, FL ,Palm Beach, 60000 , 2020-0-29 , YGHMN , 154.01 florida, FL ,Palm Beach, 60000 , 2020-0-29 , YGHMN , 154.01 florida, FL ,Palm Beach, 60000 , 2020-0-29 , CXZASD , 154.01

因此php artisan queue:work --queue=high,low的优先级将高于dispatch((new Job)->onQueue('high'))

或者您可以使用自定义队列名称:

dispatch((new Job)->onQueue('low'))