QMQ

消息中间件
授权协议 Apache-2.0
开发语言 Java
所属分类 服务器软件、 JMS/消息中间件
软件类型 开源软件
地区 国产
投 递 者 左丘楷
操作系统 跨平台
开源组织 去哪儿网
适用人群 未知
 软件概览

QMQ 是去哪儿网内部广泛使用的消息中间件,自2012年诞生以来在去哪儿网所有业务场景中广泛的应用,包括跟交易息息相关的订单场景; 也包括报价搜索等高吞吐量场景。目前在公司内部日常消息 qps 在 60W 左右,生产上承载将近 4W+ 消息 topic ,消息的端到端延迟可以控制在 10ms 以内。

QMQ 主要提供以下特性:

  • 异步实时消息

  • 延迟/定时消息

  • 基于 Tag 的服务端过滤

  • Consumer 端幂等处理支持

  • Consumer 端 filter

  • 死信消息

  • 结合 Spring annotation 使用的简单 API

  • 提供丰富的监控指标

  • 接入 OpenTracing

  • 分布式事务(即将开源)

  • 消息投递轨迹(即将开源)

  • 历史消息的自动备份(即将开源)

  • 关于QMQ实现原理进行总结及实际使用中碰到的坑以及解决方案, 还需要思考一个问题就是QMQ如何避免消息重复消费,如何实现顺序消费问题 这些好好想想好好总结总结 1. QMQ 是一个可靠消息队列,基于QMQ可以实现业务解耦,将同步业务变成异步业务,大大提高程序的并发特性。 比如 A系统以来B系统,B系统依赖C系统,然而C有一个功能要调用A的某个功能,如果三者都通过接口进行依赖,就会产生循环依赖问题,

  • 文章概要 背 景 2012 年,随着公司业务的快速增长,公司当时的单体应用架构很难满足业务快速增长的要求,和其他很多公司一样,去哪儿网也开始了服务化改造,按照业务等要素将原来庞大的单体应用拆分成不同的服务。那么在进行服务化改造之前首先就是面临是服务化基础设施的技术选型,其中最重要的就是服务之间的通信中间件。一般来讲服务之间的通信可以分为同步方式和异步方式。同步的方式的代表就是 RPC,我们选择了当

  • 前言 QMQ有关actor的一篇文章阐述了actor的应用场景。即client消费消息的请求会先进入一个RequestQueue,在client消费消息时,往往存在多个主题、多个消费组共享一个RequestQueue消费消息。在这个Queue中,存在不同主题的有不同消费组数量,以及不同消费组有不同consumer数量,那么就会存在抢占资源的情况。举个文章中的例子,一个主题下有两个消费组A和B,A有

  • 整体结构 要了解delay-server源码的一个整体结构,需要我们跟着源码,从初始化开始简单先过一遍。重试化的工作都在startup这个包里,而这个包只有一个ServerWrapper类。 结合上一篇的内容,通过这个类就基本能看到delay的一个源码结构。delay-server基于netty,init方法完成初始化工作(端口默认为20801、心跳、wheel等),register方法是向met

  • 前言 QMQ是一款去哪儿网内部使用多年的mq。不久前(大概1-2年前)已在携程投入生产大规模使用,年前这款mq也开源了出来。关于QMQ的相关设计文章可以看这里。在这里,我假设你已经对QMQ前世今生以及其设计和实现等背景知识已经有了一个较为全面的认识。 主要功能 对于delay-server,官方已经有了一些介绍。记住,官方通常是最卖力的那个"媒婆"。qmq-delay-server其实主要做的是转

  • Problem F: Frequent values You are given a sequence of n integersa1 , a2 , ... , anin non-decreasing order. In addition to that, you are given several queries consisting of indices i and j (1 ≤ i ≤ j

 相关资料
  • 概念 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并且只完成了一部分,如果它突然挂掉了,会发生什么情况? RabbitMQ一旦向消费者传递了一条消息,就会立即将该消息标记为删除。在这种情况下突然有个消费者挂掉了,将会丢失正在处理的信息,以及后续应该发送给该消费者的信息,因为该消费者无法接收到 为了保证消息在发送过程中不丢失,RabbitMQ引入消息应答机制 消息应答机制指

  • 使用方式 QMQ - https://github.com/qunarcorp/qmq Spring Boot Starter for QMQ - https://gitee.com/wjtree/qmq-spring-boot-starter 引入 Maven 依赖(已上传到中央仓库) <dependency>    <groupId>xin.wjtree.qmq</groupId>    <a

  • translated_page: https://github.com/PX4/Devguide/blob/master/en/middleware/mavlink.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e MAVLink消息 所有消息的概述可以在这里找到. 创建自定义MAVLink消息 这篇教程是假设你已经在 msg/

  • translated_page: https://github.com/PX4/Devguide/blob/master/en/middleware/uorb.md translated_sha: 18f5865bf5265934136cf5d18f838203c3db2100 uORB消息机制 简介 uORB是一种用于线程间/进程间进行异步发布-订阅的消息机制的应用程序接口(API)。 在这个教

  • 发布确认原理 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上的消息都会被指派一个唯一的 ID(从一开始),一旦消息被投递到所有匹配的队列后,broker 就会发送一个确认给生产者(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的队列了 如果消息和队列是持久化的,那么确认消息会在将消息写入磁盘后发出,broker 回传给生产者的确认消息中 ,

  • 向源生成特殊的clear-message,这将导致聚合的消息变为空 将消息直接写入具有空数据的中间主题 另一种方式,也许kafka-streams已经有一个API调用了? 加分问题:如果我知道我不想让消息坐在中间话题中的时间超过6个月,我可以指示kafka-streams创建6M留存的中间话题,还是在我运行App之前我自己手动创建话题?