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

jopen 6年前發布 | 13K 次閱讀 去哪兒 QMQ

去哪兒網正式開源內部使用的消息中間件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

項目首頁: https://github.com/qunarcorp/qmq

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!