我想根据邮件标题处理不同的传入邮件。如何在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>
答案 0 :(得分:2)
为什么你需要presence.queue?只需使用适当的路由键绑定您的使用者队列即可。如果要使用邮件头进行路由,请使用标头交换。
答案 1 :(得分:1)
校正。生产者向交换机发送消息,而不是队列。请回到AMQP理论。
他们也可以使用相同的路由密钥发送消息,但正如Gary建议的那样,您可以使用 Headers Exchange 并通过MessageProperties中的某个值构建与队列的绑定。 特别是你已经拥有了这个价值。
生产者方面有改变的迹象。但是从另一方面来说:你是服务器(消费者)和你所拥有的一切:你可以配置AMQP路由,因为它对你来说很舒服。
这就是AMQP优于JMS的原因!