去哪兒網正式開源內部使用的消息中間件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 消息消費者
根據圖中的編號描述一下其交互過程
-
delay server 向 meta server 注冊
-
實時 server 向 meta server 注冊
-
producer 在發送消息前需要詢問 meta server 獲取 server list
-
meta server 返回 server list 給 producer (根據 producer 請求的消息類型返回不同的 server list )
-
producer 發送延時/定時消息
-
延時時間已到,delay server 將消息投遞給實時 server
-
producer 發送實時消息
-
consumer 需要拉取消息,在拉取之前向 meta server 獲取 server list (只會獲取實時 server 的 list )
-
meta server 返回 server list 給 consumer
-
consumer 向實時 server 發起 pull 請求
-
實時 server 將消息返回給 consumer
項目首頁: https://github.com/qunarcorp/qmq