日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rabbitmq容器在运行中会根据异常等级(Fatal)认为不可恢复

發布時間:2024/4/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)认为不可恢复的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。