【问题标题】:Exchange type issues in RabbitMQ..Consumer expects "fanout" but producer actual is "topic"RabbitMQ 中的交换类型问题..消费者期望“扇出”,但生产者实际是“主题”
【发布时间】:2019-02-04 10:28:24
【问题描述】:

我有一个 docker 环境,其中消息服务(rabbitmq)和我的服务(myapp)在 docker 中配置。我尝试使用 myapp 发布的消息。 myapp 在给定的消息通道和消费者代码中生成“扇出”类型的消息,我尝试设置 rabbitmq 复杂性,以便可以使用“扇出”类型的消息。

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(回复代码=406, reply-text=PRECONDITION_FAILED - 不等价的 arg 'type' 用于交换 虚拟主机“/”中的“应用程序状态”:收到“扇出”但当前是 '主题', class-id=40, method-id=10)

我已经对生产者代码和消费者代码进行了足够的分析。我仍然无法缩小问题的范围。我的问题是:我能否以能够接受生产者发送的任何类型消息的方式配置通道。

假设生产者 P1 产生类型为直接的消息,而 P2 产生类型为扇出的消息。我可以有一个通用的消费者代码,以便它能够接收从 P1 和 P2 生成的消息...

【问题讨论】:

  • 如果出现前置条件错误,请务必检查队列和交换的参数,因为我试图修复队列上type arg 的值但它实际上是一个参数的交流。 Queue & Exchange QueueBinding QueueBinding Exchange Queue Exchange Exchange Queue Exchange 的参数在spring boot的监听器注解中的注解参数帮我弄明白了

标签: rabbitmq


【解决方案1】:

假设生产者 P1 产生类型为直接的消息,而 P2 产生类型为扇出的消息。我可以有一个通用的消费者代码,以便它能够接收从 P1 和 P2 生成的消息...

消息没有directfanout 的类型,但交换有。您的发布者和消费者代码必须声明 两个 交换,每种类型一个。

然后,您的发布者将发布到每个交换,具体取决于消息是应该直接路由到一个队列还是扇出到多个队列。

最后,您的消费者必须声明队列并将队列绑定到每个交换,然后从每个队列消费。


注意:RabbitMQ 团队会监控 rabbitmq-users mailing list,并且有时只回答 StackOverflow 上的问题。

【讨论】:

    【解决方案2】:

    是的,它不是消息类型,而是交换类型。感谢卢克·巴肯(Luke Bakken)的投入。我已经联系了rabbitmq论坛。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      相关资源
      最近更新 更多