Как создать очередь и запустить воркер динамически в yii2-queue?

Компонент yii2-queue позволяет создавать очереди используя конфиг примерно так:

return [
    'bootstrap' => [
        'queue', // The component registers own console commands
    ],
    'components' => [
        'queue' => [
            'class' => \yii\queue\redis\Queue::class,
            'channel' => 'my-queue',
        ],
    ],
];


И затем запустить для очереди слушателя:

php yii queue/listen

Но сейчас у меня стоит создание очередей динамически:

$queue = new yii\queue\redis\Queue([
      'channel' => 'channel_group_' . $i,
]);


Чтобы запустить слушателя для этой очереди необходимо выполнить:

$queue->listen(5);

Не совсем понимаю как запустить этот слушатель используя консольную команду (в фоне)?

Т.е. допустим в проекте в одном из контроллеров создаем несколько объектов queue, добавляем в них таски, но как запустить слушателей в фоне?
  • Вопрос задан
  • 3697 просмотров
Пригласить эксперта
Ответы на вопрос 1
@sehav
Мое решение:
Отнаследовался от redisCommand
use yii\queue\redis\Command;

class RedisCommand extends Command
{
    public function actionRun($channel = null)
    {
        if ($channel !== null) {
            $this->queue->channel = $channel;
        }

        return $this->queue->run(false);
    }
}

Подключил его в консольном конфиге
'queue' => [
            'class' => \yii\queue\redis\Queue::class,
            'commandClass' => \app\commands\RedisCommand::class,
            'redis' => 'redis',
            'channel' => 'default', // Queue channel key
            'as log' => \yii\queue\LogBehavior::class,
        ]

В консоли одноразово
yii queue/run channel_group_1

Для listen аналогично переопределите метод actionListen, только канал вторым параметром
Команда будет выглядеть
yii queue/run 3 channel_group_1
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы