我正在学习 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);
答案 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'))
。