RabbitMQ中的Exchange类型问题,.消费者期望“扇出”,但生产者实际上是“主题”

bjp0bcyl  于 7个月前  发布在  RabbitMQ
关注(0)|答案(2)|浏览(82)

我有一个docker环境,其中消息服务(rabbitmq)和我的服务(myapp)在docker中配置。我尝试使用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时:我得到以下先决条件错误:原因:
com.rabbitmq.client.ShutdownSignalException:通道误差;协议方法:#method(reply-code=406,reply-text=PRECONDITION_FANONDITION- inequivalent arg 'type' for exchange 'applicationStatus' in vhost '/':接收到'fanout',但当前是'topic',class-id=40,method-id=10)
我已经充分分析了生产者代码和消费者代码。我仍然不能缩小问题的范围。我的要求是:我可以配置通道,使我能够接受生产者发送的任何类型的消息吗?
假设生产者P1生产直接类型的消息,P2生产扇出类型的消息。我可以有一个共同的消费者代码,使它将能够接收从P1和P2产生的msgs.

31moq8wy

31moq8wy1#

是的,它不是消息类型,而是交换类型。感谢Luke Bakken的输入。我已经联系了RabbitMQ论坛。
https://groups.google.com/forum/#!topic/rabbitmq-users/6IQ4s6pmys0

rseugnpd

rseugnpd2#

假设生产者P1生产直接类型的消息,P2生产扇出类型的消息。我可以有一个共同的消费者代码,使它将能够接收从P1和P2产生的msgs.
消息没有directfanout的类型,交换有。您的发布者和使用者代码必须声明 * 两个 * 交换,每种类型一个。
然后,您的发布者将发布到每个交换机,这取决于消息是应该直接路由到一个队列还是扇出到多个队列。
最后,您的消费者必须声明队列并将其绑定到每个交易所,然后从每个队列消费。

相关问题