rabbitmq 消息持久化設置失效的疑難排查
在 RabbitMQ 中,delivery_mode 屬性控制消息持久化方式。設置為 1 表示消息僅存儲在內存中,但實際應用中,即使設置了 delivery_mode: 1,消息有時仍會被寫入磁盤,導致性能下降。
本文分析一個案例:用戶發現即使設置 delivery_mode: 1,消息投遞速度仍然很慢,并且內存中消息數量(In memory)與持久化消息數量(Persistent)相等。這與預期不符,因為非持久化消息不應該寫入磁盤。
用戶已確認消息的 delivery_mode 正確設置,排除了代碼問題??紤]到該隊列由 kubernetes 管理員部署,用戶懷疑是服務器配置問題。在 docker 環境下測試,問題未重現,進一步佐證了此猜測。
用戶提出了兩種可能:
- 服務器內存不足。
- RabbitMQ 啟用了某些特殊特性。
關鍵觀察:無論 delivery_mode 為 1 或 2,In memory 和 Persistent 值始終相等。
社區成員給出了一個合理的解釋:啟用 Stream 隊列。Stream 隊列是 RabbitMQ 的一種特殊隊列類型,默認啟用持久化,即使 delivery_mode 設置為 1,消息也會寫入磁盤。
因此,如果遇到類似問題,請檢查是否使用了 Stream 隊列。如果是,則需要調整相關配置,例如禁用 Stream 隊列的持久化或使用普通隊列,以確保消息處理符合預期。 這將有助于提升消息投遞速度,避免因非預期持久化導致的性能瓶頸。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END