天天看點

去哪兒網正式開源内部使用的消息中間件 QMQ

去哪兒網近日宣布開源其内部廣泛使用的消息中間件 QMQ 。QMQ 自2012年誕生以來在去哪兒網所有業務場景中廣泛的應用,包括跟交易息息相關的訂單場景; 也包括報價搜尋等高吞吐量場景。目前在公司内部日常消息 qps 在 60W 左右,生産上承載将近 4W+ 消息 topic ,消息的端到端延遲可以控制在 10ms 以内。

QMQ 主要提供以下特性:

  • 異步實時消息
  • 延遲/定時消息
  • 基于 Tag 的服務端過濾
  • Consumer 端幂等處理支援
  • Consumer 端 filter
  • 死信消息
  • 結合 Spring annotation 使用的簡單 API
  • 提供豐富的監控名額
  • 接入 OpenTracing
  • 分布式事務(即将開源)
  • 消息投遞軌迹(即将開源)
  • 曆史消息的自動備份(即将開源)

架構概覽

下圖是 QMQ 中各元件及其互動圖:

  • meta server 提供叢集管理和叢集發現的作用
  • server 提供實時消息服務
  • delay server 提供延時/定時消息服務,延時消息先在 delay server 排隊,時間到之後再發送給 server
  • producer 消息生産者
  • consumer 消息消費者
去哪兒網正式開源内部使用的消息中間件 QMQ

根據圖中的編号描述一下其互動過程

  1. delay server 向 meta server注冊
  2. 實時 server 向 meta server注冊
  3. producer 在發送消息前需要詢問 meta server 擷取 server list
  4. meta server 傳回 server list 給 producer (根據 producer 請求的消息類型傳回不同的 server list )
  5. producer 發送延時/定時消息
  6. 延時時間已到,delay server 将消息投遞給實時 server
  7. producer 發送實時消息
  8. consumer 需要拉取消息,在拉取之前向 meta server 擷取 server list (隻會擷取實時 server 的 list )
  9. meta server 傳回 server list 給 consumer
  10. consumer 向實時 server 發起 pull 請求
  11. 實時 server 将消息傳回給 consumer

更多細節可查閱項目文檔。