В конфиге приложения добавил два компонента. Консьюмер для первой очереди - код на фреймворке (отправка почты и смсок). Консьюмер для второй очереди - сторонний, поэтому сериализуем и выключаем strictJobType, а также не включаем в бутстрап. Кусок конфига:
Код: Выделить всё
$rabbit = [
'class' => \yii\queue\amqp_interop\Queue::class,
'driver' => \yii\queue\amqp_interop\Queue::ENQUEUE_AMQP_LIB,
'as log' => \yii\queue\LogBehavior::class,
'host' => '127.0.0.1',
'port' => 5672,
'user' => 'test',
'password' => 'test',
];
'bootstrap' => [
'notificationQ',
],
'components' => [
'notificationQ' => ArrayHelper::merge($rabbit, [
'queueName' => 'notifications'
]),
'networkQ' => ArrayHelper::merge($rabbit, [
'queueName' => 'network',
'strictJobType' => false,
'serializer' => \yii\queue\serializers\JsonSerializer::class,
]),
]
1. Исходное состояние - полное отсутствие очередей в RabbitMQ. Добавляем через Yii2 в первую очередь:
Код: Выделить всё
Yii::$app->notificationQ->push(new \common\jobs\TestQueueJob(['test' => true]));
2. Исходное состояние - полное отсутствие очередей в RabbitMQ (удалена notifications). Добавляем через Yii2 во вторую очередь:
Код: Выделить всё
Yii::$app->networkQ->push(['function' => 'task', 'test' => true]);
Два первых кейса прошли так, как ожидалось. В следующих кейсах описание проблемы:
3. Исходное состояние - такое же, как после выполнения кейса №1, т.е. создалась очередь notifications и в нее было добавлено одно сообщение. Теперь добавляем сообщение во вторую очередь network, не удаляя первую очередь notifications.
Код: Выделить всё
Yii::$app->networkQ->push(['function' => 'task', 'test' => true]);
Вопрос
Это баг или я что-то делаю не так?