1

我想根据消息头以不同的方式处理传入的消息。如何在 RabbitMQ 中高效实现?

我的听众正在收听来自 present.queue 频道的消息。消息头 KEY 有不同的键:key1,key2。带有 key1 的消息应该由 messageService.method1 处理,带有 key2 的消息应该由 messageService.method2 处理。

这是我正在使用的代码,但显然它是错误的。我可能应该将消息从 present.queue 路由到 first.queue 和 second.queue ?

<!-- RECEIVER -->

<rabbit:queue id="presence.queue" name="presence"  durable="true"/>
<rabbit:queue id="first.queue" name="first"/>
<rabbit:queue id="second.queue" name="second"/>

<rabbit:direct-exchange name="presence.direct" durable="true" >
   <rabbit:bindings>
      <rabbit:binding queue="presence.queue" key="key1"/>
      <rabbit:binding queue="presence.queue" key="key2"/>
   </rabbit:bindings>
</rabbit:direct-exchange>

<!-- RabbitMQ Asynchronous Receiver from PRESENCE_ENGINE queue -->
<rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto" > 
    <rabbit:listener queues="first.queue" ref="messageService" method="method1" />
    <rabbit:listener queues="second.queue" ref="messageService" method="method2" />
</rabbit:listener-container>
4

2 回答 2

2

Why do you need presence.queue? Just bind your consumer queues with the appropriate routing key. If you want to use message headers for routing, use a Headers Exchange.

See Getting Started and Headers Exchange.

于 2013-12-18T17:39:28.437 回答
1

更正。生产者将消息发送到交换器,而不是队列。请回到 AMQP 理论。

他们也可以使用相同的路由键发送消息,但正如 Gary 建议的那样,您可以使用Headers Exchange并通过 MessageProperties 中的某个值建立与队列的绑定。尤其是你已经拥有了这个价值。

生产者方面没有什么可改变的。但从另一面来看:你是服务器(消费者)和你的所有东西:你可以配置 AMQP 路由,因为它对你来说很舒服。

这就是 AMQP 优于 JMS 的原因!

于 2013-12-19T08:43:17.413 回答