如何在没有接收到路由密钥的情况下跟踪 SimpleMessageListenerContainer 中的消息来自哪个 queue

How to keep track of which queue a message came from in a SimpleMessageListenerContainer without a received routing key

我们的应用程序有一个带有侦听器容器的 amqp inbound-channel-adapter,我们可以在其中动态添加和删除 queue 个名称。

我们想利用 RabbitMQ 的密件抄送(Sender-selected 分发)功能,您可以在其中将密件抄送 header 设置为收件人路由密钥的 Collection。这将有利于让 RabbitMQ 分发消息而不是让 Spring 集成创建副本(可能是数千个)并单独发送它们。

问题在于,当 RabbitMQ 发送消息时,它会按预期删除 BCC 字段,并且不会将接收者的路由密钥放入接收到的路由密钥中 header。此外,似乎无法将消息映射到它来自的 queue。因此,应用程序不知道 "who" 消息的目的(queue-name/routing-key of queue 它来自)。

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

我们考虑过 2 种方法。

1) 为每个需要收听的 queue 动态创建一个入站通道适配器,它有一个动态创建的 header enricher 来添加接收者 header = queue 正在收听的名称。

2) 动态创建一个 sub-classed 侦听器容器,其中包含一个 queue 名称 属性,将其消息发送到网关以将其返回到集成流中。

有人可以帮助我们确定 queue 我们的消息来自哪里,但没有收到路由密钥 header 吗?

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