文章目錄
為進到 RabbitMQ 的 message 加上時間
同事懷疑某個外部的 RabbitMQ 訊息有 delay 的狀況,想要釐清到底是外部 RabbitMQ 發送慢了還是 application 處理慢了,所以打算在 RabbitMQ 上為每個 message 加上進 queue 的時間,供後續查問題使用
原本也可以在源頭為 message 加上發送時間,但因為中間過了好幾手的 shovel,造成源頭的發送時間只能證明中間傳輸過程慢了,還是不知道慢在哪裡
基本環境設定
- macOS Big Sur 11.6
- docker desktop 3.6.0 (67351)
docker images
rabbitmq:3.8.16-management
docker run -d --rm --hostname my-rabbit --name test-rabbit -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=pass.123 rabbitmq:3.8-management
rabbitmq plugins
- rabbitmq_message_timestamp 3.8.0
設定方式
啟用
rabbitmq_message_timestamp
plugins- 不需重啟 RabbitMQ
- 啟用時如果遇到找不到 plugin 的錯誤,請參考之前筆記 RabbitMQ 無法啟用想要的 plugin
rabbitmq-plugins enable rabbitmq_message_timestamp
實際效果
- properties 多了
timestamp
- headers 多了
timestamp_in_ms
- properties 多了
說明
- 時間資訊會儲存在 properties:
timestamp
與 headers:timestamp_in_ms
中 - 不會覆蓋原本 message 就存在的 properties:
timestamp
或 headers:timestamp_in_ms
資訊
- 時間資訊會儲存在 properties:
心得
使用上需要留意幾個情境
時間資訊不是 message 第一次進 queue 的時間
從進到安裝
rabbitmq_message_timestamp
的 instance 才會開始加上時間資訊,可能不是最源頭或是第二層只能取得第一次加入時間資訊的內容
假設最源頭加上時間資訊,那麼第二層處理時並不會覆蓋,只能將原有資訊 forward,所以從第三層取得的時間資訊就是最源頭 message 進 queue 的時間
如果原有 message 就會使用 properties:
timestamp
或 headers:timestamp_in_ms
需要注意部份覆蓋問題只要名稱符合就會忽略不處理,但兩者是個別看的 (以下模擬原有 message 存在 properties:
timestamp
,僅寫入 headers:timestamp_in_ms
)
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-08
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。