【问题标题】:Is there a way to get messages from reply queue after restart of the producer in spring-amqp在 spring-amqp 中重新启动生产者后,有没有办法从回复队列中获取消息
【发布时间】:2017-05-18 15:08:53
【问题描述】:

所以我的情况如下:

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

但是,如果生产者在收到所有回复之前就倒下了,那么以后就无法再得到它们了。所有待处理的回复都会产生警告“没有待处理的回复 - 可能超时:”。当我查看代码时,我完全理解为什么会发生这种情况。 有没有办法持久存储传入回复消息的信息?我是在做完全错误的事情,还是无法用 spring-amqp 覆盖我的用例?

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

【问题讨论】:

    标签: spring-amqp


    【解决方案1】:

    目前不支持保留待处理的回复信息;通常在请求/回复场景中,如果请求者死了,回复就没有意义了。但我可以看到有些情况可能并非如此。

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

    您需要进行自己的请求/回复关联(例如,使用 correlationId 标头),将待处理的回复关联保存在某个地方。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多