Потребитель rabbitmq получает сообщения с другим ключом маршрутизации

У нас есть два потребителя с привязкой c1 (в php) к exchange 1, очереди 1 и ключу маршрутизации 1; и c2 (в Java) bing для обмена 1, очередь 1 и ключ маршрутизации 2. то есть отличаются только ключи маршрутизации, но обмен и очередь одинаковы.

в php мы делаем связывание следующим образом

$channel->queue_bind($this->queue, $this->exchange, $this->routing1);

в Java, следующее

channel.queueBind(queue, exchange, routing2);

Теперь, когда мы публикуем сообщения, предназначенные для c2, используя ключ маршрутизации 2, мы заметили, что сообщения, полученные c1 и c2 в циклическом порядке, а не только полученные c2.

Все отправители для c1 и c2 находятся в php, а отправитель для c1 делает следующее

$channel->basic_publish($message, $this->exchange, $this->routing1);

И отправитель для c2 делает следующее

$channel->basic_publish($message, $this->exchange, $this->routing2);

Есть ли у нас правильное предположение? Что-то не так с кодом?

[Edit1] в качестве эксперимента мы изменили привязку к отдельным очередям для двух потребителей и издателей. и мы заметили, что сообщения, предназначенные для c2 (q2 и r2), были получены и c2, и c1 … что-то здесь не так.

1

Решение

отличаются только ключи маршрутизации, но обмен и очередь одинаковы.

Вы разработали свои очереди и потребителей, чтобы произвести это поведение.

когда RMQ имеет несколько потребителей для очереди, он будет циклически пересылать сообщения из этой очереди всем доступным потребителям. это специально разработано в RMQ — оно позволяет вам масштабировать число потребителей для данной очереди, чтобы вы могли обрабатывать большие объемы сообщений.

если вам нужны C1 и C2 для получения разных сообщений, а не циклических сообщений из Q1 между ними, то C1 и C2 должны иметь разные очереди, на которые они подписаны.

например:

  • E1 с ключом маршрутизации 1 должен перейти к QC1
  • E1 с ключом маршрутизации 2 должен перейти к QC2
  • C1 должен принимать сообщения от QC1
  • C2 должен принимать сообщения от QC2

имея отдельные очереди для потребителей, вы гарантируете сообщения, идущие соответствующему потребителю

4

Другие решения

Других решений пока нет …