2017-02-19 2 views
10

Я изучаю Job dispatching from hereКак установить электронную почту с высоким, низким и средним приоритетом с помощью очереди?

Проблема

Я прочитал, что каждое соединение имеет параметр очереди, которые сообщают имя очереди. Вопрос: как установить приоритет для отправки сообщений с низким или средним или высоким приоритетом?

Cmd проворная

Я использую команду: PHP очередь ремесленника: слушать обрабатывать задания.

Что я пытаюсь?

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 

Controller Код для регистр электронной почты

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

Controller Код для сброса пароля

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

В переменной дескриптора задания используется переменная $ User. Вы уверены, что это определено? – zgabievi

+0

Да, я могу подтвердить, что объект User имеет значение, и я проверил его, распечатав объект в .env-файле. – Pankaj

+0

Вы начали свой рабочий стол? 'php artisan queue: work --queue = high' –

ответ

6

Примите к сведению Connections Vs. Очереди примечание в Laravel's queue documentation, которое применимо ко всем драйверам очереди, кроме SQS, насколько я знаю.

Перед началом работы с очередями Laravel, важно понимать различие между «связью» и «очередями». В конфигурационном файле config/queue.php есть опция конфигурации . Этот параметр определяет конкретное соединение с базовым сервисом , таким как Amazon SQS, Beanstalk или Redis. Однако любое заданное соединение в очереди может иметь несколько «очередей», которые могут считаться как разные стеки или груды заданий в очереди.

Обратите внимание, что каждый пример конфигурации подключения в файле конфигурации очереди содержит атрибут очереди. Это очередь по умолчанию, на которую будут отправляться задания, когда они отправляются на заданное соединение .Другими словами, если вы посылаете работу без явного определяющих, какая очередь она должна быть отправлена ​​в, работа будет помещается в очередь, определенной в атрибуте очереди конфигурации соединения:

В вы зарегистрируете одно соединение в очереди в файле config/queues.php, а параметр default будет просто очередью, по которой задания отправляются по умолчанию, если другая очередь не указана.

Ответ Виталия выше был бы правильным подходом к проблеме (объединиться с одним соединением с очередью по умолчанию), а затем настроить свои задания для отправки в разные очереди, если это необходимо. Это важный (я думаю) контекст того, как работает конфигурация очереди.

3

Вы должны быть две очереди определены в вашем config/queue.php фил е. Скажем, один с названием «высокий», а другой «низкий».

Затем вы можете направить работу на них по мере необходимости, как это:

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

Примечание: ->onQueue('high')

Наконец, вы должны запускать: php artisan queue:work --queue=high,low

Это начать который будет обрабатывать все задания в «высокой» очереди, прежде чем перейти к заданиям на «низком уровне».

+0

high: означает имя очереди. Это не устанавливает какой-либо приоритет. – Pankaj

+0

@Helper да, это имя очереди, но порядок, в котором вы помещаете имена очередей, - это порядок, из которого они будут схвачены, поэтому вы получаете приоритет через это – avip

2

Попробуйте

'connections' => [ 

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

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

], 

И затем

PHP мастеровых очереди: послушай --queue = Регистрация высокой, регистр низкой

+0

'Register-high' - это имя соединения и' high' это имя очереди. Где приоритет? – Pankaj

3
'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, 
    ], 
], 

Я предлагаю вам изменить свой код в следующим образом:

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

высокий приоритет работы - контроллер Код для регистр электронной почты

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

Средний приоритет работы - контроллер Код для сброса пароля

$job = (new SendResetPasswordEmail($this->tokens->create($user), $user)) 
     ->onConnection('Register') 
     ->onQueue("medium"); 
dispatch($job); 

Низкий приоритет работы

dispatch((new LowPriorityJob())->onQueue("low")); 

Defa ии приоритет работы

dispatch((new DefaultPriorityJob())); 

-> OnConnection ('Register') // эта строка полезна, если вы указываете вы по умолчанию подключение Регистрация в .env QUEUE_DRIVER = Регистрация

запустить свой вакансии

Эта команда запускает ваши задания, хранящиеся в соединении по умолчанию. В вашем случае Регистрация

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

эту команду запустить ваши работы хранятся в связи customConnectionName

php artisan queue:work customConnectionName --queue=high,medium,low,default 
+0

default означает имя очереди. Это не устанавливает приоритет. – Pankaj

Смежные вопросы