有没有办法在spring-amqp中重启生产者后从回复队列中获取消息

时间:2017-05-18 15:08:54

标签: spring-amqp

所以我的情况如下:

  • Producer将使用AsyncRabbitTemplate#sendAndReceive
  • 向队列发送消息
  • 消费者将处理该消息并将回复发送到回复队列 所以到目前为止,当生产者启动并运行时,一切都会正常工作。将收到来自回复队列的消息,一切正常。

但是当制作人在收到所有回复之前失败时,以后就无法获得回复。所有待处理的回复都会产生警告"没有待处理的回复 - 可能超时:"。我完全理解为什么当我查看代码时会发生这种情况。 是否无法持续存储传入回复消息的信息?我做错了什么或是不可能用spring-amqp覆盖我的用例?

所以问题是在重启生产者之后从固定回复队列接收回复的最佳方式是什么。

1 个答案:

答案 0 :(得分:0)

目前暂不支持持续待处理的回复信息;通常使用请求/回复方案,如果请求者死亡,则回复没有意义。但我可以看到有些情况可能并非如此。

您可以简单地使用RabbitTemplate send()而不是使用异步模板,并使用配置为处理和路由回复的侦听器容器。

您需要执行自己的请求/回复关联(例如,使用correlationId标头),在某处保留待处理的回复关联。

Spring Integration provides a Metadatastore abstraction有几个可能适合的实现。