besogonskiy
@besogonskiy
работаю php laravel разработчиком.

На каджую очередь отдельный воркер или в одном воркере несколько очередей?

Использую Laravel. И следовательно для запуска очередей использую команду
php artisan  queue:work rabbitmq --queue=jobs, emails,  imports --tries=3


ну и конечно исползую supervisor.

И вот вопрос. В каких случаев на один проект заводить несколько воркеров в супервизоре и в каждом воркере указывать свою очередь. Например, emails

Или в каком случае заводить один воркер на проект и просто через запятую перечислить очереди после queue=

Отдельные воркеры нужно заводить в случае если хочешь с разным приорететом и количеством процессов запускать очереди?
  • Вопрос задан
  • 412 просмотров
Пригласить эксперта
Ответы на вопрос 2
pLavrenov
@pLavrenov
Разработка сайтов
Один на все. Через Horizon. Там можно балансировать процессы по очередям.

horizon
Ответ написан
Комментировать
@vism
отдельно нужно тогда, когда нужна независимость и надёжность.
Например, queue может зависнуть, завесить весь воркер и все остальные queue в воркере.
Или нужны отдельные настройки для некоторых queue.

Я обычно создаю один воркер для high, medium, low
И отдельные воркеры под важные или тяжелые queue
пример
'defaults' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['high','medium', 'low'],
            'balance' => 'simple',
            'minProcesses' => 1,
            'maxProcesses' => 5,
            'balanceMaxShift' => 1,
            'balanceCooldown' => 3,
            'tries' => 3,
            'timeout' => 600,
        ],
        'supervisor-2' => [
            'connection' => 'redis',
            'queue' => [
                \App\Services\QueueService::QUEUE_NAME__MEDIA_LIBRARY,
            ],
            'balance' => 'simple',
            'minProcesses' => 1,
            'maxProcesses' => 2,
            'balanceMaxShift' => 1,
            'balanceCooldown' => 3,
            'tries' => 3,
            'timeout' => 60,
        ],
        'supervisor-3' => [
            'connection' => 'redis',
            'queue' => [
                \App\Services\QueueService::QUEUE_NAME__IMPORT_WEBHOOK,
            ],
            'balance' => 'simple',
            'minProcesses' => 1,
            'maxProcesses' => 2,
            'balanceMaxShift' => 1,
            'balanceCooldown' => 3,
            'tries' => 3,
            'timeout' => 1200,
        ],
    ],
    'environments' => [
        'production' => [
            'supervisor-1' => [
                'minProcesses' => 1,
                'maxProcesses' => 5,
            ],
            'supervisor-2' => [
                'minProcesses' => 1,
                'maxProcesses' => 2,
            ],
            'supervisor-3' => [
                'minProcesses' => 1,
                'maxProcesses' => 2,
            ],
        ],

        'staging' => [
            'supervisor-1' => [
                'minProcesses' => 1,
                'maxProcesses' => 2,
            ],
            'supervisor-2' => [
                'minProcesses' => 1,
                'maxProcesses' => 2,
            ],
            'supervisor-3' => [
                'minProcesses' => 1,
                'maxProcesses' => 2,
            ],
        ],

        'local' => [
            'supervisor-1' => [
                'minProcesses' => 1,
                'maxProcesses' => 4,
            ],
            'supervisor-2' => [
                'minProcesses' => 1,
                'maxProcesses' => 2,
            ],
            'supervisor-3' => [
                'minProcesses' => 1,
                'maxProcesses' => 2,
            ],
        ],
    ],
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы