我正在使用带有 Spring AMQP 抽象的 RabbitMQ。 所以本质上我正在使用 Spring AMQP。
我需要处理连接失败。使用 Lyra 可以很容易地实现这一点。当您使用原始 RabbitMQ 类时。
如何在 Spring AMQP 中实现相同的目标? 我希望我的代码不知道任何网络问题。
我知道Spring默认处理重新连接(以某种方式),但我想要的是Lyra风格的配置(无论是XML还是其他地方),这样我就可以定义超时、最大重试、退避等。
最佳答案
在消费端,无法进行配置 - 容器只会按照固定的时间表重试连接;通过设置 recoveryInterval
进行配置在 SimpleMessageListenerContainer
默认为 5 秒。为消费者配置退避没有多大值(value)。
在发布方面,您可以使用spring-aop
将 RabbitTemplate (AmqpTemplate 接口(interface))包装在 MethodInterceptor
中包裹 send*()
调用RetryTemplate
来自spring-retry 。 RetryTemplate
可以配置各种选项,包括退避策略等。
如果您需要这方面的帮助,我可以尝试找时间发布要点。
编辑:
根据下面的评论 - 正确的是 recoveryInterval
目前不适用于命名空间(但您仍然可以将容器定义为 <bean ... class="...SimpleMessageListenerContainer...>
。
但是,它在几周前被添加到主分支 ( commit here )。它在 1.3.0.BUILD-SNAPSHOT 中可用。
此外,由于您在这里提出问题,我添加了 RetryTemplate
RabbitTemplate
的选项(pull request here)。应该很快就会合并。 1.3.0 (1.3.0.RC1) 候选版本将于周五发布,1.3.0 GA 版本将在几周内发布。
关于java - 在 Spring AMQP 中使用 Lyra 风格处理重新连接/重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22143742/