如何在RabbitMQ接收器中路由消息?

时间:2013-12-18 16:46:39

标签: spring rabbitmq messaging spring-amqp

我想根据邮件标题处理不同的传入邮件。如何在RabbitMQ中有效地实现它?

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

这是我正在玩的代码,但显然是错的。我可能应该将来自presence.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>

2 个答案:

答案 0 :(得分:2)

为什么你需要presence.queue?只需使用适当的路由键绑定您的使用者队列即可。如果要使用邮件头进行路由,请使用标头交换。

请参阅Getting StartedHeaders Exchange

答案 1 :(得分:1)

校正。生产者向交换机发送消息,而不是队列。请回到AMQP理论。

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

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

这就是AMQP优于JMS的原因!