spring-amqp - 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
长时间等待是否安全?
这是一个个案问题,还是最好不要使用长间隔来避免线程阻塞?
解决方案
这实际上取决于您的应用程序以及导致重试的原因。例如,如果数据库不可用,那么很可能所有线程都会重试。
但是,如果某些类型的消息可能会成功,而其他类型的消息则处于这些漫长的等待中,那么您的设计可能需要重新审视,并为这两种消息类型使用不同的队列/侦听器容器。
它不会真正“伤害”任何东西,但我并不是很喜欢长时间处于未确认状态的消息。stop()
在解决下游问题之前,侦听器容器可能会更好。
推荐阅读
- kubernetes - 在 AKS 集群中处理大文件 (3gb) 所需的节点硬件要求和 kubernetes nginx 入口配置是什么?
- selenium - 调用“Driver.Url”等简单命令时驱动程序超时
- reactjs - React 从组件变量中获取状态
- python - 在安装软件包 pip install --upgrade scikit-learn==0.20.3 时,我遇到了一个很长的错误
- json - Python 3 JSON 序列化类/会话?
- r - 具有2个变量的R ggplot直方图
- python - 挑选出数组/列表的 k 个最大元素
- python - 负责本地 SHAP 值的前 N 个特征
- docker - 如何使用 Github Actions 构建使用 RSA 密钥作为构建参数的 docker 镜像
- docker - 当另一台主机宕机时,访问局域网中可用的 Docker Swarm 主机