Pan*_*kaj 16 laravel laravel-5.3 laravel-5.4
问题
我读到每个连接都有队列参数,它告诉队列名称.问题是:如何设置发送低或中或高优先级电子邮件的优先级?
Cmd提示
我正在使用命令:php artisan queue:监听进程作业.
我尝试了什么?
php artisan queue:work --queue=high,default
Run Code Online (Sandbox Code Playgroud)
但是如果连接的队列参数值不高,则此代码永远不会起作用
默认队列驱动程序
'default' => env('QUEUE_DRIVER', 'database'),
Run Code Online (Sandbox Code Playgroud)
队列连接
'connections' => [
'Register' => [
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'low',
'retry_after' => 5,
],
'ForgotPassword' => [
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'low',
'retry_after' => 5,
],
],
Run Code Online (Sandbox Code Playgroud)
.ENV
QUEUE_DRIVER=Register
Run Code Online (Sandbox Code Playgroud)
注册电子邮件的控制器代码
$job = (new SendActivationEmail($Data))
->onConnection('Register');
dispatch($job);
Run Code Online (Sandbox Code Playgroud)
重置密码的控制器代码
$job = (new SendResetPasswordEmail($this->tokens->create($user), $user))
->onConnection('ForgotPassword');
dispatch($job);
Run Code Online (Sandbox Code Playgroud)
Dwi*_*ght 10
记下Connections Vs. 队列记录在Laravel的队列文档中,据我所知,它适用于除SQS之外的所有队列驱动程序.
在开始使用Laravel队列之前,了解"连接"和"队列"之间的区别非常重要.在config/queue.php配置文件中,有一个连接配置选项.此选项定义与后端服务(如Amazon SQS,Beanstalk或Redis)的特定连接.但是,任何给定的队列连接都可能有多个"队列",可能被认为是不同的堆栈或成堆的排队作业.
请注意,队列配置文件中的每个连接配置示例都包含一个队列属性.这是将作业发送到给定连接时将调度作业的默认队列.换句话说,如果您在未明确定义应分派到哪个队列的情况下调度作业,则作业将被放置在连接配置的队列属性中定义的队列中:
实际上,您将在config/queues.php
文件中注册一个队列连接default
,如果未提供另一个队列,则参数将只是默认情况下分派作业的队列.
上面的维塔利的答案是解决问题的正确方法(合并到一个默认队列的单一连接)然后根据需要调整你的工作以发送到不同的队列.对于队列配置的工作原理,这是一些重要的(我认为)上下文.
您应该在config/queue.php
文件中定义了两个队列。比如说,一个名称为“高”,另一个名称为“低”。
然后,您可以根据需要将作业分派给他们,如下所示:
$job = (new SendResetPasswordEmail($this->tokens->create($user), $user))
->onConnection('ForgotPassword');
dispatch($job)->onQueue('high'));
Run Code Online (Sandbox Code Playgroud)
笔记: ->onQueue('high')
最后,您将运行:
php artisan queue:work --queue=high,low
这将启动一个工作程序,该工作程序将处理“高”队列中的所有作业,然后再处理“低”队列中的作业。
小智 5
'connections' => [
'Register' => [ //<this name is connection name
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'low', //<this name is default queue name then you register a queue using this connection
'retry_after' => 5,
],
],
Run Code Online (Sandbox Code Playgroud)
我建议您通过以下方式修改代码:
'connections' => [
'Register' => [
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'default',
'retry_after' => 5,
],
],
Run Code Online (Sandbox Code Playgroud)
高优先级作业-注册电子邮件的控制器代码
$job = (new SendActivationEmail($Data))
->onConnection('Register')
->onQueue("high");
dispatch($job);
Run Code Online (Sandbox Code Playgroud)
中优先级作业-重置密码的控制器代码
$job = (new SendResetPasswordEmail($this->tokens->create($user), $user))
->onConnection('Register')
->onQueue("medium");
dispatch($job);
Run Code Online (Sandbox Code Playgroud)
低优先级工作
dispatch((new LowPriorityJob())->onQueue("low"));
Run Code Online (Sandbox Code Playgroud)
默认优先作业
dispatch((new DefaultPriorityJob()));
Run Code Online (Sandbox Code Playgroud)
-> onConnection('Register')//如果指定默认连接为.env中的Register,则此行很有用QUEUE_DRIVER = Register
运行你的工作
此命令运行存储在默认连接中的作业。在您的情况下注册
php artisan queue:work --queue=high,medium,low,default
Run Code Online (Sandbox Code Playgroud)
此命令运行存储在customConnectionName连接中的作业
php artisan queue:work customConnectionName --queue=high,medium,low,default
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4269 次 |
最近记录: |