Насколько я вижу, Lumen и Laravel используют один и тот же код для обработки очередей, так что вот что может сработать, хотя я не проверял это.
Запустите работника очереди как:
php artisan queue:work --queue=queue1,queue2
Это будет означать, что задания в очереди1 обрабатываются до заданий в очереди2 (к сожалению, это единственный способ прослушать несколько очередей)
Тогда в вашей работе:
class MyJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle()
{
if ($this->job->getQueue() === 'queue1') {
//Things
} else {
// different things
}
}
Если вам нужно использовать несколько соединений, вы не можете сделать это, используя одного работника, однако вы можете использовать несколько работников одновременно.Сначала настройте соединения, например, в config/queue.php
'connections' => [
'sqs' => [
'driver' => 'sqs',
'key' => 'your-public-key',
'secret' => 'your-secret-key',
'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id',
'queue' => 'your-queue-name',
'region' => 'us-east-1',
],
'sqs2' => [
'driver' => 'sqs',
'key' => 'your-other-public-key',
'secret' => 'your-other-secret-key',
'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-other-account-id',
'queue' => 'your-other-queue-name',
'region' => 'us-east-1',
],
]
. Если вы используете супервизор, то настройте конфигурацию супервизора, если нет, вам придется запускать обоих рабочих вручную.Вот конфигурация супервизора, которую вы можете использовать:
[program:laravel-sqs-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --queue=queue1
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
[program:laravel-sqs2-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs2 --queue=queue2
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
Изменение путей и пользовательских настроек в соответствии с вашим приложением.