
腾讯云消息队列 TDMQ 产品系列介绍
消息队列 TDMQ 是什么?
分布式架构中的重要组件,提供异步通信的基础能力,通过应用解耦降低系统复杂度,提升系统可用性和可扩展性
提供丰富的产品形态,兼容社区主流协议,覆盖在线和离线场景,服务端和客户端场景,满足互联网、金融、教育、出行、交通等不同行业和场景的需求

互联网高并发场景的普及
企业基于社区版自建 Pulsar 面临的挑战
RabbitMQ 是典型的易上手、难精通的产品,如果没有资深的运维团队,很容易踩坑
日益加重的研发和运维成本
腾讯云 RabbitMQ:开箱即用的消息队列服务
RabbitMQ是比较早期的开源消息队列产品,自建客户群体较大,广泛用于秒杀、流控、系统解耦场景,单机QPS在万级别
RabbitMQ 产品形态


【1.1 开箱即用】分钟级一键创建集群,按需选择规格信息

【1.2 开箱即用】根据业务需求平滑扩容
1. 选择升配后的变更配置类型、节点规格、节点数、部署方式
2. 选择变配时间

【2.1 可观测性】清晰全面的集群信息管理界面
查看集群信息
【集群列表】
基本信息
筛选操作
全面监控管理
【Vhost列表】
基本信息
筛选操作
Exchange、Queue和路由关系绑定管理

【2.2 可观测性】完善的监控指标,告警规则最佳实践

【3.1 智能巡检】自动化运维,极致排障体验

【4.1 插件管理】灵活插件管控
在集群管理下的集群详情页顶部,选择插件管理页签,进入插件管理页面

【5.1 开源管控】提供社区管控体验
直通RabbitMQ社区
控制台直通RabbitMQ社区版
输入用户名及密钥即可访问

【6.1】消息查询
1. 开启 trace 插件
2. 指定集群->VHost->Queue,也可进一步指定 Routing Key、用户、信息的headers 和 body,进一步缩小查询范围
3. 查看消息详情:元数据、消息体

【7.1】产品化迁移上云能力
1、开源rabbitMQ控制台,通过“Download broker definitions”导出 Vhost 的元数据
2、创建迁移任务,指定Vhost,导入JSON元数据文件

RabbitMQ 模型架构
Connection:生产者、消费者连接到RabbitMQ Broker的TCP连接
Channel:建立在Connection之上的虚拟连接,RabbitMQ处理的每个AMQP命令都是通过channel完成的
Vhost:用作逻辑隔离,不同 Vhost 之间的 Exchange 和 Queue 相互隔离,互不干扰
Exchange(X):接收来自生产者的消息并将消息路由到 Queue 的组件
Queue:存储消息的缓冲区,供消费者消费消息
生产者(P):向Exchange发送消息
消费者(C):从Queue拉取消息进行消费

RabbitMQ 的架构演进总结

镜像队列与容灾部署架构,两种容灾模式可选
可以选择两种集群部署模式,均可以支持对单可用区容灾,rabbitmq 镜像队列不像 ZK 一样强一致,只要保证有一个副本就可以提供读写服务,并且保证有一个可用区故障时,不会导致数据丢失

网络分区与恢复手段

其他可靠性&可恢复性的控制参数
元数据&消息持久化: durable queue? persistent message? lazy queue?
队列选主机制: HA mirror promotion on failure?on shutdown?when-synced? always?
副本同步机制:HA mode?HA params?HA sync mode?all?exactly?automatic?manual?
消息确认机制:Producer Confirm?Consumer Confirm?DeliveryMode? 队列类型:Classic? Quorum ? Stream?

RabbitMQ 的运维难点——开源&黑盒&腾讯云解决之道
RabbitMQ 客户端和服务端最佳实践
腾讯云全面调优和专家经验沉淀
RabbitMQ是典型的易上手,难精通的产品,如果没有资深的运维团队,很容易踩坑 腾讯云在RabbitMQ经过多年众多客户核心场景的打磨和锤炼,沉淀了大量的运维和优化经验
RabbitMQ 应用场景
应用场景1:秒杀场景
秒杀,是电商系统中一个非常常见的场景。解决方案比较多。使用RabbitMQ是一个比较好的做法
如果是复杂的扣减库存(如涉及商品信息本身或牵连其他系统),则建议使用数据库进行库存数量的扣减,可以使用异步的方式来应对这种高并发的库存更新
①在用户下单时,不立刻生成订单,而是将所有订单依次放入队列
②下单模块依据自身的处理速度,从队列中依次获取订单进行“下单扣库存”操作
③在订单生成成功后,用户即可进行支付操作了。 这种方式是针对“秒杀”场景的,依据“先到先得”原则来保证公平公正,所有用户都可以抢购,然后等待订单处理,最后生成订单(如果库存不足,则生成订单失败)

应用场景2:优先级消息
在消费消息时,如果消息的重要程度不同,重要性高的消息希望被优先消费,这时可以使用RabbitMQ优先级队列的能力,让优先级高的消息优先被消费
比如系统中有订单催付的场景,客户在商城下的订单,系统会及时将订单推送给客户。如果在设定的时间内未付款那么就会给客户推送一条短信提醒。商家会分大客户和小客户,比如大客户的订单催收消息需要优先处理,其他的小客户的催收相对优先级会低一些。使用RabbitMQ 的优先级队列可以很好的支持这个场景,让优先级高的消息不会积压太久。如果发现是大客户的订单给一个相对比较高的优先级,优先被处理;否则就是默认优先级

应用场景3:延迟消息场景
实际业务系统中,有发送延迟消息的需求。如果自己实现延迟逻辑,可靠性和延迟精度很难得到保障。使用消息中间件,如RabbitMQ可以很好的处理此类需求。延迟消息的使用场景有:
订单系统中,用户下单后有30分钟时间进行支付。如果30分钟内没有支付成功,那么这个订单将进行异常处理。这里可以使用RabbitMQ延迟消息能力来处理这些超时订单
物联网系统中,用户希望通过手机遥控智能设备在指定的时间工作,这时就可以将指令发到延迟队列,当指令设定的时间到了,再将控制指令推送到智能设备

应用场景4:消息广播
很多业务系统需要将信息广播给下游的系统。如果通过RPC的方式,耦合比较重,对上游业务系统的压力也比较大。此时,可以使用RabbitMQ的Fanout Exchange来处理此类需求。可以使用的场景:
大型多人在线游戏(MMO)可以将其用于排行榜更新或其他全局事件
体育新闻网站可以使用扇形交换机向客户端近乎实时的分发比分信息
分布式系统使用它来广播各种状态和配置更新
群聊可以使用它在参与者之间分发消息

应用场景5:灵活路由场景
随着微服务架构的流行,服务拆分得较细,服务的数据会以消息的形式,使用精心设计的分发策略发送到不同的队列中去。这时可以充分地利用RabbitMQ灵活的消息路由的能力,将消息分发到目标Queue中。可以使用的场景:
日志处理场景,可以将日志按类型投递到不同的Queue。比如Error单独一个处理队列,优先处理
电商物流系统的物流信息按地域分发给不同的消费端进行处理
复杂路由场景

迁移方案:双写双读模式

客户案例:垂类社交Top1 核心IM服务

客户案例:垂类金融Top1 核心金融服务



