queue\amqp

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
tugrik
Сообщения: 26
Зарегистрирован: 2016.03.11, 17:07

queue\amqp

Сообщение tugrik »

Доброго времени суток.
Возник небольшой вопрос.
Дано:
yii2 c компонентом queue, (драйвер amqp (RabbitMq)) через которые выполняются внутренние таски приложения (в супервизоре стоит yii queue/listen).

Дано еще порядка 10 очередей в которые сторонние приложения "пушат" свои сообщения.
На каждую очередь написан свой консольный контроллер который запускается по крону.

Вопрос:
Возможно ли "заставить" компонент queue слушать (уйти от крона) сразу несколько очередей и выполнять что-то похожее на этот псевдокод:

Код: Выделить всё

switch ($queueName) {
case 'queueNameOne':
parseMessageFromQueueNameOne($message);
break;
case 'queueNameTwo':
parseMessageFromQueueNameTwo($message);
break;
case 'queueNameThree':
parseMessageFromQueueNameThree($message);
break;
}
или же это реализовывается не через компонент queue ?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: queue\amqp

Сообщение ElisDN »

Это решается запуском в супервизоре нескольких листенеров:

yii queue/listen queueNameOne
yii queue/listen queueNameTwo
yii queue/listen queueNameThree
Аватара пользователя
tugrik
Сообщения: 26
Зарегистрирован: 2016.03.11, 17:07

Re: queue\amqp

Сообщение tugrik »

ElisDN писал(а): 2020.01.22, 15:28 Это решается запуском в супервизоре нескольких листенеров:

yii queue/listen queueNameOne
yii queue/listen queueNameTwo
yii queue/listen queueNameThree
Если я все верно понял, у меня есть два решения :
под каждую очередь создать в конфиге свой вариант компонента:

Код: Выделить всё

 'queue-rabbit-q1' => [
            'class' => \yii\queue\amqp_interop\Queue::class,
            'as log' => \yii\queue\LogBehavior::class,
            'ttr' => PHP_INT_MAX,
             'queueName' => 'queueNameOne',
            'serializer' => \yii\queue\serializers\JsonSerializer::class,
        ],
         'queue-rabbit-q2' => [
            'class' => \yii\queue\amqp_interop\Queue::class,
            'as log' => \yii\queue\LogBehavior::class,
            'ttr' => PHP_INT_MAX,
             'queueName' => 'queueNameTwo',
            'serializer' => \yii\queue\serializers\JsonSerializer::class,
        ],
и запустить:
yii queue-rabbit-q1/listen
yii queue-rabbit-q2/listen

или же создать свой класс работы с очередью:

Код: Выделить всё

MyQueue exdends \yii\queue\amqp_interop\Queue::class
в котором переопределить queueName с параметров , так как yii queue/listen не умеет переопределять\прокидывать queueName (как я понял)
и запустить уже
yii queue/listen --queueName queueNameOne
yii queue/listen --queueName queueNameTwo
yii queue/listen --queueName queueNameThree
Верно?
Аватара пользователя
tugrik
Сообщения: 26
Зарегистрирован: 2016.03.11, 17:07

Re: queue\amqp

Сообщение tugrik »

ап
Ответить