#php #laravel #lumen
#php #laravel #lumen
Вопрос:
Я хотел отправлять сообщения в несколько очередей SQS параллельно или одно за другим, но это должно быть динамичным, и когда я запускаю worker, он должен извлекать сообщения из обеих очередей и дифференцировать.
Как я могу добиться этого в Lumen?
Обновить
Как использовать несколько worker для разных очередей с разными экземплярами amazon SQS?
Ответ №1:
Насколько я вижу, Lumen и Laravel используют один и тот же код для обработки очередей, так что вот кое-что, что может сработать, хотя я это не тестировал.
Запустите queue worker как:
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',
],
]
Если вы используете supervisor, настройте свою конфигурацию supervisor, если нет, вам придется запускать оба workers вручную. Вот конфигурация супервизора, которую вы можете использовать:
[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
Измените пути и пользовательские настройки в соответствии с вашим приложением.
Комментарии:
1. На самом деле я хотел прослушать разные очереди из разных учетных записей Amazon, как я могу этого добиться?
2. Насколько я вижу, у одного работника нет возможности прослушивать несколько «подключений». Для этого вам следует запустить несколько workers.
3. Как использовать несколько worker одновременно, с разными URL очереди для SQS?
4. Хорошо, сначала настройте каждое соединение в вашей конфигурации (например, назовите их sqs1, sqs2), если вы используете supervisor (что я бы рекомендовал), ознакомьтесь с конфигурацией supervisor эта конфигурация предназначена для одного рабочего, но у вас может быть несколько конфигураций suck в файле конфигурации, поэтому на практике запускайте несколько рабочих
5. Спасибо вам за это, я проверю это. Пожалуйста, обновите свой ответ. 😉