首页 > 解决方案 > spring-retry:长时间等待是否安全?(半小时等)

问题描述

我有一个网络应用程序,我在其中使用以下设置启用重试spring-amqp来收听消息:rabbitmq

spring:
  rabbitmq:
    listener:
      simple:
        retry:
          enabled: true
          multiplier: 2
          initial-interval: 15m
          max-interval: 1h

org.springframework.retry.backoff.Sleeper最常用的实现是基于哪个Thread.sleep- AFAIK - 锁定当前线程?

我发现amqp默认情况下并发侦听器计数为 1,即使我将其更改为 10,例如;线程池会长时间丢失一个线程。

就长时间阻塞侦听器线程池中的线程而言,spring-retry长时间等待是否安全?

这是一个个案问题,还是最好不要使用长间隔来避免线程阻塞?

标签: spring-amqpspring-retry

解决方案


这实际上取决于您的应用程序以及导致重试的原因。例如,如果数据库不可用,那么很可能所有线程都会重试。

但是,如果某些类型的消息可能会成功,而其他类型的消息则处于这些漫长的等待中,那么您的设计可能需要重新审视,并为这两种消息类型使用不同的队列/侦听器容器。

它不会真正“伤害”任何东西,但我并不是很喜欢长时间处于未确认状态的消息。stop()在解决下游问题之前,侦听器容器可能会更好。


推荐阅读