RabbitMQ Cluster 常見錯誤碼原因與解決辦法

1.場景


1.1 404 NOT_FOUND

org.springframework.amqp.AmqpIOException: java.io.IOException
    at org.springframework.amqp.rabbit.connection.RabbitUtils.convertRabbitAccessException(RabbitUtils.java:109) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.connection.RabbitAccessor.convertRabbitAccessException(RabbitAccessor.java:106) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:413) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitAdmin.initialize(RabbitAdmin.java:298) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitAdmin$10.onCreate(RabbitAdmin.java:232) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.connection.CompositeConnectionListener.onCreate(CompositeConnectionListener.java:31) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:181) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createBareChannel(CachingConnectionFactory.java:171) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.access$200(CachingConnectionFactory.java:48) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:296) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at com.sun.proxy.$Proxy35.basicPublish(Unknown Source) ~[na:na]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.doSend(RabbitTemplate.java:443) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitTemplate$1.doInRabbit(RabbitTemplate.java:227) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:408) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.send(RabbitTemplate.java:225) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.convertAndSend(RabbitTemplate.java:242) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.convertAndSend(RabbitTemplate.java:234) ~[spring-rabbit-1.0.0.RELEASE.jar:na]
...
...
...
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; reason: {#method<channel.close>(reply-code=404, reply-text=NOT_FOUND - home node 'rabbit@xxx-pf-gs1' of durable queue 'queue' in vhost 'vhost' is down or inaccessible, class-id=50, method-id=10), null, ""}
    at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:454) ~[amqp-client-2.8.1.jar:na]
    at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:294) ~[amqp-client-2.8.1.jar:na]
    at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:144) ~[amqp-client-2.8.1.jar:na]
    at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:91) ~[amqp-client-2.8.1.jar:na]
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:519) ~[amqp-client-2.8.1.jar:na]

1.2 406 PRECONDITION_FAILED

org.springframework.amqp.AmqpIOException: java.io.IOException
        at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:71) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.connection.RabbitAccessor.convertRabbitAccessException(RabbitAccessor.java:113) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1461) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1411) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1387) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.core.RabbitAdmin.initialize(RabbitAdmin.java:500) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.core.RabbitAdmin$11.onCreate(RabbitAdmin.java:419) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.connection.CompositeConnectionListener.onCreate(CompositeConnectionListener.java:33) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:571) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils$1.createConnection(ConnectionFactoryUtils.java:90) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.doGetTransactionalResourceHolder(ConnectionFactoryUtils.java:140) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:76) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:505) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1382) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_73]
Caused by: java.io.IOException: null
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:105) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:101) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:123) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:925) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:50) ~[amqp-client-3.6.6.jar:3.6.6]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_73]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_73]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_73]
        at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_73]
        at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:955) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at com.sun.proxy.$Proxy45.queueDeclare(Unknown Source) ~[na:na]
        at org.springframework.amqp.rabbit.core.RabbitAdmin.declareQueues(RabbitAdmin.java:575) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.core.RabbitAdmin.access$200(RabbitAdmin.java:66) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.core.RabbitAdmin$12.doInRabbit(RabbitAdmin.java:504) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1455) ~[spring-rabbit-1.7.1.RELEASE.jar:na]
        ... 12 common frames omitted
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'x-dead-letter-exchange' for queue 'queue' in vhost '/': received the value 'exchange' of type 'longstr' but current is none, class-id=50, method-id=10)
        at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:32) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:366) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:229) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:117) ~[amqp-client-3.6.6.jar:3.6.6]
        ... 24 common frames omitted
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'x-dead-letter-exchange' for queue 'biliNotifyQueue' in vhost '/': received the value 'sdkNotifyExchange' of type 'longstr' but current is none, class-id=50, method-id=10)
        at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:483) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:318) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:143) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:90) ~[amqp-client-3.6.6.jar:3.6.6]
        at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:571) ~[amqp-client-3.6.6.jar:3.6.6]
        ... 1 common frames omitted


2.觸發(fā)場景與解決方案


2.1 404 NOT_FOUND

2.1.1 場景

集群環(huán)境下(節(jié)點A、B莹规、C)队贱,節(jié)點A宕機(QueueA所屬節(jié)點)摆霉,客戶端在剩余節(jié)點上聲明持久化隊列QueueA(非鏡像隊列)副砍,服務(wù)端響應(yīng)404 NOT_FOUND旺罢。
注意:消費者客戶端收到404報錯后券敌,默認(rèn)自動關(guān)閉棚菊,需編寫監(jiān)聽器重連或重啟應(yīng)用恢復(fù)。

2.1.2 解決方案
  1. 恢復(fù)節(jié)點A扳肛,消費者客戶端所在應(yīng)用重啟傻挂。
  2. 聲明QueueA為高可用鏡像隊列

2.2 406 PRECONDITION_FAILED

2.2.1 場景

當(dāng)客戶端聲明持久化隊列QueueB參數(shù)與服務(wù)端保存參數(shù)不一致時敞峭,服務(wù)端響應(yīng)406 PRECONDITION_FAILED。聲明操作失敗蝉仇。

2.2.2 解決方案
  1. 根據(jù)實際需求旋讹,調(diào)整服務(wù)端或客戶端QueueB參數(shù)殖蚕,使雙方匹配。
    (rabbitmqctl -p vhostname list_queues name arguments 命令可檢查服務(wù)器中隊列參數(shù))

3.參考資料

  1. 《RabbitMQ實戰(zhàn) 高效部署分布式消息隊列》- Alvaro Videla,Jason J.W. Williams 著
  2. RabbitMQ Broker Configuration
  3. High Available(Mirrored) Queue
  4. Clustering Guide
  5. Amqp 0.9.1 Complete Reference Guide


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沉迹,一起剝皮案震驚了整個濱河市睦疫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鞭呕,老刑警劉巖蛤育,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異葫松,居然都是意外死亡瓦糕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門腋么,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咕娄,“玉大人,你說我怎么就攤上這事珊擂∈ダ眨” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵摧扇,是天一觀的道長圣贸。 經(jīng)常有香客問我,道長扛稽,這世上最難降的妖魔是什么吁峻? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮庇绽,結(jié)果婚禮上锡搜,老公的妹妹穿的比我還像新娘。我一直安慰自己瞧掺,他們只是感情好耕餐,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辟狈,像睡著了一般肠缔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哼转,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天明未,我揣著相機與錄音,去河邊找鬼壹蔓。 笑死趟妥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的佣蓉。 我是一名探鬼主播披摄,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼亲雪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疚膊?” 一聲冷哼從身側(cè)響起义辕,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寓盗,沒想到半個月后灌砖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡傀蚌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年基显,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喳张。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡续镇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出销部,到底是詐尸還是另有隱情摸航,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布舅桩,位于F島的核電站酱虎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏擂涛。R本人自食惡果不足惜读串,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撒妈。 院中可真熱鬧恢暖,春花似錦、人聲如沸狰右。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棋蚌。三九已至嫁佳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谷暮,已是汗流浹背蒿往。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留湿弦,地道東北人瓤漏。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔬充。 傳聞我的和親對象是個殘疾皇子俯在,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)娃惯,斷路器,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • API定義規(guī)范 本規(guī)范設(shè)計基于如下使用場景: 請求頻率不是非常高:如果產(chǎn)品的使用周期內(nèi)請求頻率非常高肥败,建議使用雙通...
    有涯逐無涯閱讀 2,521評論 0 6
  • JSON JSON和XML都是需要解析的 JSON是一種輕量級的數(shù)據(jù)格式趾浅,一般用于數(shù)據(jù)交互服務(wù)器返回給客戶端的數(shù)據(jù)...
    JonesCxy閱讀 1,847評論 2 10
  • 本篇文章篇幅比較長,先來個思維導(dǎo)圖預(yù)覽一下馒稍。 一皿哨、概述 1.計算機網(wǎng)絡(luò)體系結(jié)構(gòu)分層 2.TCP/IP 通信傳輸流 ...
    滌生_Woo閱讀 54,974評論 24 557
  • 《人生碎語》 文/白傳英 把時間給了電腦 它卻給我一個腰椎間盤 把光陰給了手機 它卻給我一個頸椎 把初戀...
    白清風(fēng)閱讀 189評論 0 0