Публикация сообщений в двух очередях RabbitMQ вместо одной (используя py-amqp) - PullRequest
2 голосов
/ 27 апреля 2010

У меня странная проблема с использованием py-amqp и модуля Flopsy . Я написал издателя, который отправляет сообщения на сервер RabbitMQ, и я хотел иметь возможность отправить его в указанную очередь. В модуле Flopsy это невозможно, поэтому я настроил его, добавив параметр и строку для объявления очереди в методе _init__ объекта Publisher

    def __init__(self, routing_key=DEFAULT_ROUTING_KEY,
                  exchange=DEFAULT_EXCHANGE, connection=None,
                  delivery_mode=DEFAULT_DELIVERY_MODE, queue=DEFAULT_QUEUE):
        self.connection = connection or Connection()
        self.channel = self.connection.connection.channel()
        self.channel.queue_declare(queue) # ADDED TO SET UP QUEUE
        self.exchange = exchange
        self.routing_key = routing_key
        self.delivery_mode = delivery_mode

Объект канала является частью библиотеки py-amqplib

У меня проблема в том, что, даже если он отправляет сообщения в указанную очередь, он также отправляет сообщения в очередь по умолчанию. Поскольку в этой системе мы ожидаем отправки довольно большого количества сообщений, мы не хотим подчеркивать, что система создает бесполезные дубликаты ... Я пытался отладить код и перейти в библиотеку py-amqplib, но не в состоянии выяснить какую-либо ошибку или недостающий шаг. Кроме того, я не могу найти какую-либо форму документации py-amqplib вне кода.

Любые идеи о том, почему это происходит и как это исправить?

1 Ответ

0 голосов
/ 27 апреля 2010

Хорошо, я думаю, что понял. если у кого-то еще нет лучшей идеи. Я проверил этот учебник по AMQP Я предполагал, что издатель должен знать очередь, но это не так, вам нужно отправить сообщение на exchange , и получателю объявит, что очередь связана с обменом. Это позволяет использовать разные опции при отправке и получении, как вы можете видеть в руководстве.

Итак, я включил информацию об обмене как по издателю, так и по потребителю, не используя звонок на queue_declare, и, похоже, он работает нормально.

...