rabbitmq容器在运行中会根据异常等级(Fatal)认为不可恢复
spring amqp rabbitmq容器在运行中会根据异常等级(Fatal)认为不可恢复,重试后会关闭。本文分享导致关闭的一个场景,以及如何配置来恢复连接。
异常日志
异常日志
Cancel received for? ***Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.rabbit.support.ConsumerCancelledExceptionRestarting Consumer:?Failed to check/redeclare auto-delete queue(s). org.springframework.amqp.AmqpIOException: java.io.IOExceptionFailed to declare queueQueue declaration failed; retries left=3 org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$DeclarationException: Failed to declare queue(s): xxx_queueConsumer received fatal exception on startup org.springframework.amqp.rabbit.listener.QueuesNotAvailableException: Cannot prepare queue for listener. Either the queue doesn't exist or the broker will not allow us to use it.at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:539)at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.Stopping container from aborted consumer
问题说明
spring amqp rabbitmq 使用中遇到 rabbitmq服务端因为某些问题,比如重启(生产一般很少发生),权限配置错误,误操作(误删队列)等导致服务端短期连接不上时,org.springframework.amqp:spring-rabbit:1.7.8.RELEASE (2.0版本可能也是,未测试),默认采取的策略是重试3次(Queue declaration failed; retries left=3?),每次相隔5秒。如果仍然连接不上,并且当前rabbitmq container 没有其他队列的情况,则会关闭(Stopping container from aborted consumer)。即使rabbitmq server恢复之后(以上种种误操作),是不会重连,并继续消费的。
正确配置
@Bean(name ="xxxContainerFactory")public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,@Qualifier("xxxConnectionFactory")ConnectionFactory connectionFactory) {SimpleRabbitListenerContainerFactory factory =new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setAcknowledgeMode(AcknowledgeMode.AUTO);factory.setPrefetchCount(1);factory.setRecoveryInterval(5000L);factory.setMissingQueuesFatal(false);configurer.configure(factory,connectionFactory);return factory;}
设置factory.setMissingQueuesFatal(false),其中missingQueuesFatal.设置为true(默认值)时,如果 broker 上的 none 配置队列可用,则认为它是致命的。这会导致 application context 在启动期间无法初始化;此外,当容器正在运行时删除队列时,默认情况下,消费者进行 3 次重试以连接到队列(间隔为 5 秒)并在这些尝试失败时停止容器。
在以前的版本中无法配置。
设置为false时,在进行 3 次重试后,容器将进入恢复模式,与其他问题一样,例如 broker 已关闭。容器将尝试根据recoveryInterval?property 进行恢复。在每次恢复尝试期间,每个 consumer 将再次尝试 4 次以 5 秒间隔被动地声明队列。这个 process 将无限期地继续。
配置介绍
更多其他配置项含义官方有详细说明。
英语(官方):
https://docs.spring.io/spring-amqp/reference/html/#containerAttributes
中文:
https://www.docs4dev.com/docs/zh/spring-amqp/1.7.11.RELEASE/reference/_reference.html
rabbitmq容器在运行中会根据异常等级(Fatal)认为不可恢复相关推荐
- 打开i信服务器正在运行中,【网络异常,0/12157 Unknown】i信登录时出现
[网络异常,0/12157 Unknown]i信登录时出现 1.登陆i信时提示"登陆失败,错误原因:网络异常或网络错误,--Unknown",如下图示意,可能是您电脑为Window ...
- Docker 容器的运行(八)
一.运行容器 1.运行第一个容器 现在,让我们尝试启动第一个 Docker 容器.我们可以使用docker run命令创建容器,docker run命令提供了 Docker 容器的创建到启动的功能. ...
- 线程池内运行的线程抛异常,线程池会怎么办
线程池中实际运行的是线程池自身的线程,只是在runWorker方法中调用了我们传递进入Runnable对象的run()方法,那么如果run()方法中出现异常了,那么要怎么处理?会不会将我们的线程池停掉 ...
- 自己动手写Docker系列 -- 5.2实现查看运行中的容器
简介 在上篇中我们实现了将容器后台运行,本篇中我们将实现docker的ps命令,查看当前正在运行中的容器列表 源码说明 同时放到了Gitee和Github上,都可进行获取 Gitee: https:/ ...
- C# winform单元格的formatted值的类型错误 DataGridView中CheckBox列运行时候System.FormatException异常
C# winform单元格的formatted值的类型错误 DataGridView中CheckBox列运行时候System.FormatException异常 参考文章: (1)C# winform ...
- 4、Docker 提交运行中容器作为新的镜像
1.查看docker镜像 提交容器副本使之成为一个新的镜像 docker images tomcat 2.运行docker 镜像(tomcat)成为容器 docker run -it -d -p 88 ...
- docker ps命令详解 列出运行中的容器
docker ps命令详解 列出运行中的容器 使用docker ps命令即可列出运行中的容器,执行该命令后,会出现如下7列表格 CONTAINER_ID 表示容器ID IMAGE ...
- OpenShift Security 15 - 用 RHACS 的安全策略管理运行中的容器安全
<OpenShift 4.x HOL教程汇总> 本文在 OpenShift4.9 + RAHACS 环境中进行验证. 创建 RHACS 的 Policy 创建一个 Policy 的 JSO ...
- 如何给运行中的docker容器增加映射端口
方式一: 宝塔面板下操作 点开Docker管理器 点击状态 停掉相应的容器 在点击状态管理 点击停止 停掉docker服务 然后在宿主机宝塔面板找到以下路径文件 例如:我们要新增容器3306端口映射到 ...
最新文章
- 揭秘:1.2亿美元光刻机内部视频曝光,像科幻片一样震撼!
- iOS 获取当前设备型号iPhone7/iPhone7P
- 阿里首席架构师科普RPC框架是什么
- Golang 编程思维和工程实战
- perl中的map和grep
- 解决微信小程序安卓手机访问不到图片,无法显示图片
- turtle fillcolor_Python编程:使用海龟turtle画图制作可爱的哆啦A梦,你也可以的。
- EDA技术实用教程 | 复习四 | 标识符、关键字和规范的书写格式
- H264格式 I帧 P帧 B帧 基础知识
- DC中保存ddc格式文件(亲测有效!)save the unmapped design in ddc format
- php表单提交并发送邮件给某个邮箱(示例源码)
- el-menu菜单下划线解决办法
- 弦外雨,晚风急 吹皱芳华太无情
- 怪物的生成 攻击和掉落金币
- 多元统计分析及R语言建模
- 用python开发一个炸金花小游戏,注意别玩上瘾了~~
- csgo社区服务器文件位置,csgo社区服务器在哪
- 通达OA 精灵登录时提示“库没有注册”(图文)
- ORA-01031 新建用户创建视图提示权限不足
- mysql触发器任务