如何在没有收到路由密钥的SimpleMessageListenerContainer中跟踪消息来自哪个队列

时间:2015-03-12 16:50:32

标签: spring-integration spring-amqp

我们的应用程序有一个带有侦听器容器的amqp入站通道适配器,我们可以动态添加和删除队列名称。

我们希望利用RabbitMQ的BCC(发件人选择的分发)功能,您可以将BCC标头设置为收件人路由键集合。这将有利于RabbitMQ分发消息,而不是让Spring Integration创建副本(可能是数千个)并单独发送它们。

问题在于,当RabbitMQ发送消息时,它会按预期移除BCC字段,并且不会将接收方的路由密钥放在接收的路由密钥头中。此外,似乎无法将消息映射到它来自的队列。因此应用程序不知道"谁"该消息用于(队列名称/路由 - 它来自的队列的密钥)。

以前我们使用收到的路由密钥来识别收件人。

我们考虑了两种方法。

1)为需要侦听的每个队列动态创建入站通道适配器,该适配器具有动态创建的标头扩充器,以添加它正在侦听的收件人标头=队列名称。

2)动态创建一个子类侦听器容器,该容器包含一个队列名称属性,该属性将其消息发送到网关以将其恢复到集成流程中。

如果没有收到路由密钥标题,有人可以帮我们确定邮件来自哪个队列吗?

1 个答案:

答案 0 :(得分:0)

Artem Bilan是正确的,我使用的是旧版本的S-AMQP,它不支持该属性。我升级到S-AMQP 1.4.2,我的CONSUMER_QUEUE属性就在那里。