2015-05-04 38 views
1

我想让我的应用程序能够灵活处理将邮件发送到rabbitmq时可能发生的连接问题。我想抓住所有未发送的消息,将它们存储并在rabbitmq变为可用时发送给它们。春季AMQP回调回调与重试回调

看着官方documentation我没有设法找出返回回调和重试回调之间的区别。我明白,当重试模板耗尽已配置的策略时,会调用重试回调,但由于上下文本身不包含消息,因此不会发现这很有用。 根据在ReturnCallback接口的“returnedMessage”方法中传递的“replyCode”,可以很容易地确定进一步的行为,但是在调用此回调时还没有弄清楚。

一种方法是ConfirmCallback,但有一个问题是需要保持同步的其他逻辑CorrelationData以及这些消息的消息和状态。

因此...除了ConfirmCallback接口有没有更简单的方法来跟踪未使用Spring AMQP通过RabbitMQ成功发送的消息?

回答

1

返回是指代理由于无法传递消息而返回消息(消息发布到的交换机上没有匹配的绑定,并且强制位已设置)。

确认是代理将确认发回给发布者时,表明消息已成功路由。

重试在代理领域之外,所以它可能是您的用例需要的东西。

+0

感谢您的快速响应。如果“重试”是要走的路,是否有任何示例如何获取消息本身,因为我所得到的只是策略本身在上下文映射中?在提到的文档中,可以自己提取消息,但是在我的代码中没有发现它是这种情况。 – tropikalista

+0

正如[文档](http://docs.spring.io/spring-amqp/docs/1.5.0.BUILD-SNAPSHOT/reference/html/_reference.html#template-retry)中所述,该消息未被制作默认情况下可以在'RetryContext'中使用,但可以通过使用外部'RetryTemplate'而不是在'RabbitTemplate'内配置。我认为我们应该继续,并根据上下文中的知名关键词提供信息。请打开一个['改进'JIRA问题](https://jira.spring.io/browse/AMQP),我们会看看,但外部重试模板应该适合您。 –

+0

非常感谢...... – tropikalista