Как использовать несколько экземпляров SQS (служба очереди) в Lumen? - PullRequest
0 голосов
/ 04 марта 2019

Я хотел отправить сообщения в несколько очередей SQS параллельно или одну за другой, но это должно быть динамично, и когда я запускаю работника, он должен получать сообщения из обеих очередей и дифференцировать.
Как я могу добиться этого в Lumen ?
ОБНОВЛЕНИЕ
Как использовать несколько рабочих для разных очередей с разными экземплярами amazon SQS?

1 Ответ

0 голосов
/ 04 марта 2019

Насколько я вижу, 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

Изменение путей и пользовательских настроек в соответствии с вашим приложением.

...