Проблемы с типом обмена в RabbitMQ. Потребитель ожидает "разветвления", но фактический производитель - "тема" - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть среда докера, где служба сообщений (rabbitmq) и мои службы (myapp) настроены в докере.Я пытаюсь использовать сообщения, опубликованные myapp.myapp создает сообщения типа «fanout» в заданном канале сообщений и в коде потребителя, я пытаюсь настроить тонкости rabbitmq так, чтобы сообщения типа «fanout» могли использоваться.

consumer sample:
factry = newConnectionFactory();
factry.setHost(MYHOST);
connection.newConnection();
chnl = connection.createChannel();
channel.exchangeDeclare("MYEXCHG","fanout",true);
.....
and so  on. 

Когда потребитель устанавливает значение rabbitmq, как показано выше: я получаю следующую ошибку PRECONDITION: Причины:

com.rabbitmq.client.ShutdownSignalException: ошибка канала;Метод протокола: #method (reply-code = 406, reply-text = PRECONDITION_FAILED - неэквивалентный аргумент 'type' для обмена 'applicationStatus' в vhost '/': получен 'fanout', но текущим является 'topic', class-id = 40, method-id = 10)

Я достаточно проанализировал код производителя и код потребителя.Тем не менее я не мог сузить вопрос.Мой вопрос здесь: Могу ли я настроить канал таким образом, чтобы я мог принимать любые типы сообщений, отправленных производителем.

Скажите, что Producer P1 создает сообщения типа direct, а P2 создает сообщения типа fanout.Могу ли я иметь общий потребительский код, чтобы он мог получать сообщения от P1 и P2 ...

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Да, это не тип сообщения, а тип обмена.Спасибо Люк Баккен за ваш вклад.Я обратился к форуму rabbitmq.

https://groups.google.com/forum/#!topic/rabbitmq-users/6IQ4s6pmys0

0 голосов
/ 04 февраля 2019

Скажите, что Producer P1 создает сообщения типа direct, а P2 создает сообщения типа fanout.Могу ли я иметь общий потребительский код, чтобы он мог получать сообщения, созданные из P1 и P2 ...

Сообщения не имеют типа direct или fanout, обмены делают,Ваш код издателя и потребителя должен будет объявить два обмена, по одному для каждого типа.

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

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


ПРИМЕЧАНИЕ: команда RabbitMQ отслеживает список рассылки rabbitmq-users и только иногда отвечает на вопросы по StackOverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...