spring-retry:等待很长时间是否安全? (半小时等)

时间:2018-07-08 18:23:57

标签: spring-amqp spring-retry

我有一个Web应用程序,其中我正在使用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长时间等待是否安全,就阻止来自侦听器线程池的线程处于长期状态而言?

这是一个逐个案例的问题,还是一种最佳做法是不使用长间隔来避免线程阻塞?

1 个答案:

答案 0 :(得分:1)

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

但是,如果某些类型的消息可能会成功,而其他类型的消息则可能需要等待很长时间,那么也许您需要重新设计并针对这两种消息类型使用不同的队列/侦听器容器。

它并不会真的“伤害”任何东西,但我并不是很喜欢将消息长时间处于未经确认的状态。最好stop()侦听器容器,直到解决下游问题为止。