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