spring-重试:长时间等待安全吗? (半小时等)

spring-retry: is it safe to wait for long periods? (half hour, etc.)

我有一个网络应用程序,我在其中使用 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 长时间等待是否安全,就长时间阻塞侦听器线程池中的线程而言

这是个案问题,或者最好不要使用长间隔以避免线程阻塞?

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

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

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