yii2-queue - несколько очередей RabbitMQ

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Аватара пользователя
denisbondar
Сообщения: 31
Зарегистрирован: 2015.10.12, 19:34

yii2-queue - несколько очередей RabbitMQ

Сообщение denisbondar »

Необходимо работать с несколькими очередями RabbitMQ. Пытаюсь использовать компонент yii2-queue.
В конфиге приложения добавил два компонента. Консьюмер для первой очереди - код на фреймворке (отправка почты и смсок). Консьюмер для второй очереди - сторонний, поэтому сериализуем и выключаем 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]));
В RabbitMQ наблюдаем, что была создана очередь notifications и в нее было добавлено одно сообщение.

2. Исходное состояние - полное отсутствие очередей в RabbitMQ (удалена notifications). Добавляем через Yii2 во вторую очередь:

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

Yii::$app->networkQ->push(['function' => 'task', 'test' => true]);
В RabbitMQ наблюдаем, что была создана очередь network и в нее было добавлено одно сообщение, сериализованное json.

Два первых кейса прошли так, как ожидалось. В следующих кейсах описание проблемы:

3. Исходное состояние - такое же, как после выполнения кейса №1, т.е. создалась очередь notifications и в нее было добавлено одно сообщение. Теперь добавляем сообщение во вторую очередь network, не удаляя первую очередь notifications.

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

Yii::$app->networkQ->push(['function' => 'task', 'test' => true]);
В RabbitMQ наблюдаем, что сообщение было добавлено в обе очереди. И в notifications и в network.

Вопрос

Это баг или я что-то делаю не так?
Аватара пользователя
denisbondar
Сообщения: 31
Зарегистрирован: 2015.10.12, 19:34

Re: yii2-queue - несколько очередей RabbitMQ

Сообщение denisbondar »

Разобрался!

Фрагмент \yii\queue\amqp_interop\Queue:

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

    /**
     * The queue used to consume messages from.
     *
     * @var string
     */
    public $queueName = 'interop_queue';
    /**
     * The exchange used to publish messages to.
     *
     * @var string
     */
    public $exchangeName = 'exchange';
Нужно еще использовать разный exchangeName для каждого компонента.
Закрыто