java - 在 Spring AMQP 中使用 Lyra 风格处理重新连接/重试

标签 java spring rabbitmq message-queue spring-amqp

我正在使用带有 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-retryRetryTemplate可以配置各种选项,包括退避策略等。

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

编辑:

根据下面的评论 - 正确的是 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/

相关文章:

Java Tomcat 无法部署

java - 如何在我的 WebContent 文件夹中获取文件的真实路径?

java - 使用 Spring AMQP 监听许多短暂的、动态创建的队列

java - 如何在 Spring amqp 运行时添加/删除消费者?

Java Selenium 。通过文本查找特定 xpath 的元素

java - 如何将 2 个数组从一个类传递到另一个类

java - Spring Cloud SQS 轮询

java - 停止后续 JOptionPane 的排队

java - 通过关键字将一个大的xml文件拆分成多个小文件

python - 从 celery 中撤销任务