2

我正在使用带有 Spring AMQP 抽象的 RabbitMQ。所以本质上我使用的是 Spring AMQP。

我需要处理连接失败。当您使用原始 RabbitMQ 类时,使用Lyra很容易实现这一点。

您如何在 Spring AMQP 中实现相同的功能?我希望我的代码不知道任何网络问题

我知道 Spring 默认处理重新连接(以某种方式),但我想要的是 Lyra 风格的配置(无论是 XML 还是其他任何地方),所以我可以定义超时、最大重试次数、退避等。

4

1 回答 1

3

在消费端,没有办法配置它——容器只会按照固定的时间表重试连接;可通过设置默认为 5 秒来recoveryInterval配置。SimpleMessageListenerContainer为消费者配置退避没有太大价值。

在发布方面,您可以使用spring-aop将 RabbitTemplate(AmqpTemplate 接口)包装在将调用MethodInterceptor包装在from spring-retry中的 a 中。可以配置各种选项,包括退避策略等。send*()RetryTemplateRetryTemplate

如果您需要这方面的帮助,我可以尝试找一些时间来发布 Gist。

编辑:

根据下面的评论 - 正确,recoveryInterval命名空间当前不可用(但您仍然可以将容器定义为<bean ... class="...SimpleMessageListenerContainer...>.

但是,它是在几周前添加到主分支(在此处提交)。它在 1.3.0.BUILD-SNAPSHOT 中可用。

此外,由于您在此处提出的问题,我在(此处的拉取请求RetryTemplate)中添加了一个选项。它应该很快被合并。1.3.0 (1.3.0.RC1) 的候选版本将于周五发布,1.3.0 GA 版本将在几周内发布。RabbitTemplate

于 2014-03-03T14:10:56.453 回答