異常問題:隊列消費失敗

異常問題:隊列消費失敗

問題描述

  • 發佈生產環境之前,通知運維新增隊列 queueName
  • 測試雁陣股工程過程中發現隊列消息未消費
  • 通過 RabbitMq 的控制平臺查看隊列時發現有兩個 queueName 同名隊列
  • 有未消費信息的隊列是未綁定 exchangeKey 的 queue ,非運維創建的隊列
  • 經過本地測試,添加 queue 時不允許出現同名的 queue

異常處理

  • 緊急聯繫運維刪除兩個同名的 queue
  • 只要程序已啓動就會創建一個 queue ,所以暫時不讓運維建立新的 queue
  • 程序啓動後再讓運維將自動創建的 queue ,綁定 exchangeKey

問題分析

  • 程序中配置隊列時允許 RabbitMQ 檢測如果無此名稱的隊列則允許創建新的隊列
  • 那麼,運維已經創建了隊列,爲何程序沒有檢測到
  • 仔細對比之前在 MQ 管理平臺中查看到的兩個同名的 queue 的詳情頁
  • 在瀏覽器的URL中有一個鏈接後帶有轉譯的空格,於是定位到問題
  • 運維在添加隊列信息,直接拷貝郵件中的內容,沒有過濾後側的空格
  • 程序在檢測隊列是否存在時是完全匹配,不過濾空格
  • 生產者發發送時是發給帶有空格的隊列,因爲有綁定關係
  • 消費者監聽的是沒有空格的隊列,所以消費失敗

問題反思

  • 很多不可思議的問題的最終原因往往都是開發過程中的粗心導致的
  • 有些時候不需要將問題無限放大,查找源碼,查找運行流程,複測測試環境等等
  • 冷靜逐個分析
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章