去哪儿网正式开源内部使用的消息中间件 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://javaforall.net/101276.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • M1卡/CUID卡格式化清卡操作方法

    M1卡/CUID卡格式化清卡操作方法CUID 卡是一种可以更改 0 扇区 0 块的特殊卡 很多朋友发现 CUID 卡写入一次之后再写就不让写了 认为卡已经废了 其实可以格式化清卡以后变空白卡 再次使用 普通 M1 卡也可以用该方法清卡 把卡片恢复成空白卡 一 把 CUID 卡放读写器上 打开 IC 卡操作软件 如下图二 把该卡的 dump 文件 拖进软件 或者用 读取 dump 文件 按钮打开卡文件 然后用默认的 keyA 密码清除卡片 点 清卡 按钮 如下图三 我们看到有部分扇区提示密码错误 这是控制位改变了 keyA 密码的操作权限 也就是说 keyA 没有清除卡片的

    2025年11月25日
    4
  • stringbuffer和stringbuilder是什么_Java编程

    stringbuffer和stringbuilder是什么_Java编程字符串常量池什么是字符串常量池?JVM为了减少字符串对象的重复创建,其维护了一块特殊的内存,这段内存被称为字符串常量池(存储在方法区中)。具体实现当代码中出现字符串时,JVM首先会对其进行检查。如果字符串常量池中存在相同内容的字符串对象,则将这个对象的地址返回。如果字符串常量池中不存在相同内容的字符串对象,则创建一个新的字符串对象并放入常量池。newString(“str…

    2025年11月21日
    7
  • jwplayer html插件,jQuery插件JWPlayer视频播放器用法实例分析

    jwplayer html插件,jQuery插件JWPlayer视频播放器用法实例分析本文实例讲述了jQuery插件JWPlayer视频播放器用法。分享给大家供大家参考,具体如下:JWPlayer插件播放视频播放器使用方法:快讯视频预览.jwlogo{display:none;}#container{margin:auto;}#videoDiv{margin-top:30px;}Loadingtheplayer…$(function(){varvideoUrl…

    2022年10月19日
    5
  • Arduino 和LCD1602液晶屏 I2C接口实验「建议收藏」

    LCD1602液晶屏带I2C接口为什么使用I2C接口?因为省IO口啊,只需要4条线,可以看看之前发的实验,接线多复杂呀,对吧。(传送门:Arduino携手LCD1602向世界问好“helloWorld!”)还有背光灯,和可调节对比度(就是背面蓝色那块可以旋转的调)具体怎么实现解决问题,请往下看引脚说明GND——地线VC…

    2022年4月14日
    263
  • 图像处理——Canny算子 图像边缘检测:Canny算子、Prewitt算子和sobel算子

    图像处理——Canny算子 图像边缘检测:Canny算子、Prewitt算子和sobel算子https://blog.csdn.net/fengye2two/article/details/79190759https://www.jianshu.com/p/bed4ffe996a1

    2022年7月14日
    16
  • 简单的java图片存储方法

    简单的java图片存储方法Controller中//调用ReceivePIC.receivePIC(request,response);//封装的方法packagecom.jwwl.fsq.util;importjava.io.File;importjava.io.FileOutputStream;importjava.io.InputStream;importj

    2022年7月16日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号