RocketMQ平台的消息灰度方案(3)

简介: RocketMQ平台的消息灰度方案

五、灰度场景的校验


测试是校验方案可行性的真理,下面用简单的demo来验证鲁班平台的MQ灰度方案。


5.1 灰度版本Topic & Tag不变


这种场景在4.3、4.4时已经做了验证,不再赘述。


5.2 灰度版本Topic增加


假设v1、v2的订阅信息如表5.1所示,则Topic订阅结果如图5.1所示,TOPIC_V_ORDER被v1、v2同时订阅,首尾两条Queue分配给灰度v2的客户端,中间4条Queue则分配给非灰度v1的客户端;TOPIC_V_PAYMENT只被灰度版本v2订阅,则只会将首尾两条Queue分配给v2的客户端,其余四条Queue不会被客户端订阅。我们向TOPIC_V_ORDER分别发送4条非灰度消息和灰度消息,向TOPIC_V_PAYMENT发送4条灰度消息,从图5.2中可以看出TOPIC_V_ORDER中的非灰度消息由v1的两个客户端成功消费,TOPIC_V_ORDER与TOPIC_V_PAYMENT的灰度消息则由v2的两个客户端成功消费。


image.png


(表5.1  订阅信息表)


image.png


(图5.1  订阅结果)


image.png


(图5.2  消费结果)


5.3 灰度版本Topic减少


假设v1、v2的订阅信息如表5.2所示,则Topic订阅结果如图5.3所示,TOPIC_V_ORDER被v1、v2同时订阅,首尾两条Queue分配给灰度v2的客户端,中间4条Queue则分配给非灰度v1的客户端;TOPIC_V_PAYMENT只被非灰度版本v1订阅,则只会将中间的四条Queue分配给v1的客户端,首尾两条Queue不会被客户端订阅。我们向TOPIC_V_ORDER分别发送4条非灰度消息和灰度消息,向TOPIC_V_PAYMENT发送4条非灰度消息,从图5.4中可以看出TOPIC_V_ORDER与TOPIC_V_PAYMENT的非灰度消息由v1的两个客户端成功消费,TOPIC_V_ORDER中的灰度消息则由v2的两个客户端成功消费



(表5.2  订阅信息表)



(图5.3  订阅结果)


image.png


(图5.4  消费结果)


5.4 灰度版本Tag变化


假设v1、v2的订阅信息如表5.3所示,则Topic订阅结果如图5.5所示,TOPIC_V_ORDER被v1、v2同时订阅,首尾两条Queue分配给灰度v2的客户端,中间4条Queue则分配给非灰度v1的客户端,我们向TOPIC_V_ORDER分别发送4条Tag=v1的非灰度消息和Tag=v2的灰度消息,从图5.6中可以看出Tag为v1的非灰度消息由v1的两个客户端成功消费,Tag为v2的灰度消息则由v2的两个客户端成功消费


image.png


(表5.3  订阅信息表)


image.png


(图5.5  订阅结果)


image.png


(图5.6  消费结果)


5.5 灰度版本Topic & Tag混合变化


假设v1、v2的订阅信息如表5.4所示,则Topic订阅结果如图5.7所示,与5.2情况相同不再赘述。我们向TOPIC_V_ORDER分别发送4条Tag=v1的非灰度消息和Tag=v2的灰度消息,向TOPIC_V_PAYMENT发送4条灰度消息,消费结果如图5.8所示,可以看出v2的两个客户端成功消费了TOPIC_V_PAYMENT及TOPIC_V_ORDER中Tag=v2的灰度消息,而v1的两个客户端则只消费了TOPIC_V_ORDER中Tag=v1的非灰度消息


image.png


(表5.4  订阅信息表)



(图5.7  订阅结果)



(图5.8  消费结果)


六、结语


实际的MQ灰度版本,我们还对MQ的发送与消费方做了统一的封装,业务方只需配置graySwitch、grayFlag即可,graySwtich标记是否需要开启灰度消息,在graySwitch开启的前提下,grayFlag才会生效,用来标记当前客户端是否为灰度客户端。


在多系统交互时,业务系统可通过开关graySwitch来控制是否全量消费其他系统的灰度与非灰度消息,通过grayFlag来控制是单独消费灰度消息还是非灰度消息。graySwitch、grayFlag参数可放在配置中心做到热生效,当需要切换灰度流量时,可开发相应的脚本统一化更改grayFlag,实现全链路灰度流量的无损切换。


另外,我们对于切换状态借助Namesrv做了充分细节上的控制,保证在真正执行切换前,未消费完的消息会被消费完毕才真正的执行切换。


在此,也非常感谢阿里开源RocketMQ这个消息中间件!

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
7月前
|
消息中间件 搜索推荐 调度
RocketMQ实战—8.营销系统业务和方案介绍
本文详细介绍了电商营销系统的业务流程、技术架构及挑战解决方案。涵盖核心交易与支付后履约流程,优惠券和促销活动的发券、领券、用券、销券机制,以及会员与推送的数据库设计。技术架构基于Nacos服务注册中心、Dubbo RPC框架、RocketMQ消息中间件和XXLJob分布式调度工具,实现系统间高效通信与任务管理。针对千万级用户量下的推送和发券场景,提出异步化、分片处理与惰性发券等优化方案,解决高并发压力。同时,通过RocketMQ实现系统解耦,提升扩展性,并利用XXLJob完成爆款商品推荐的分布式调度推送。整体设计确保系统在大规模用户场景下的性能与稳定性。
RocketMQ实战—8.营销系统业务和方案介绍
|
6月前
|
物联网
(手把手)在华为云、阿里云搭建自己的物联网MQTT消息服务器,免费IOT平台
本文介绍如何在阿里云搭建自己的物联网MQTT消息服务器,并使用 “MQTT客户端调试工具”模拟MQTT设备,接入平台进行消息收发。
2423 42
|
6月前
|
物联网
如何在腾讯云等平台搭建自己的物联网MQTT服务器Broker
物联网技术及MQTT协议被广泛应用于各种场景。本文介绍物联网MQTT服务助手下载,如何搭建自己的物联网平台,并使用 “MQTT客户端调试工具”模拟MQTT设备,接入平台进行消息收发。
544 37
|
11月前
|
消息中间件 运维 安全
C5GAME 游戏饰品交易平台借助 RocketMQ Serverless 保障千万级玩家流畅体验
游戏行业蓬勃发展,作为国内领先的 STEAM 游戏饰品交易的服务平台,看 C5GAME 如何利用 RocketMQ Serverless 技术,为千万级玩家提供流畅的游戏体验,同时降低成本并提升运维效率。
619 135
C5GAME 游戏饰品交易平台借助 RocketMQ Serverless 保障千万级玩家流畅体验
|
7月前
|
消息中间件 存储 Kafka
RocketMQ实战—4.消息零丢失的方案
本文分析了用户支付完成后未收到红包的问题,深入探讨了RocketMQ事务消息机制的实现原理及其在确保消息零丢失中的作用。首先,通过全链路分析发现消息可能在推送、存储或消费环节丢失。接着,介绍了RocketMQ事务消息机制如何通过half消息、本地事务执行及回调确认来保证消息发送成功,并详细解析了其底层原理,如half消息对消费者不可见、rollback与commit操作等。同时,对比了同步重试方案,指出其在复杂场景下的局限性。
RocketMQ实战—4.消息零丢失的方案
EMQ
|
物联网 Linux C语言
在 Windows 平台搭建 MQTT 服务
NanoMQ 有着强大的跨平台和可兼容能力,不仅可以用于以 Linux 为基础的各类平台,也为 Windows 平台提供了 MQTT 服务的新选择。
EMQ
430 86
在 Windows 平台搭建 MQTT 服务
|
消息中间件 Java 测试技术
消息队列 MQ使用问题之数据流出规则是否支持平台的云RabbitMQ
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
11月前
|
消息中间件 存储 运维
2024最全RabbitMQ集群方案汇总
本文梳理了RabbitMQ集群的几种方案,主要包括普通集群、镜像集群(高可用)、Quorum队列(仲裁队列)、Streams集群模式(高可用+负载均衡)和插件方式。重点介绍了每种方案的特点、优缺点及适用场景。搭建步骤包括安装Erlang和RabbitMQ、配置集群节点、修改hosts文件、配置Erlang Cookie、启动独立节点并创建集群,以及配置镜像队列以提高可用性和容错性。推荐使用Quorum队列与Streams模式,其中Quorum队列适合高可用集群,Streams模式则同时支持高可用和负载均衡。此外,还有Shovel和Federation插件可用于特定场景下的集群搭建。
2419 2
|
11月前
|
消息中间件 RocketMQ
2024最全RocketMQ集群方案汇总
在研究RocketMQ集群方案时,发现网上存在诸多不一致之处,如组件包含NameServer、Broker、Proxy等。通过查阅官方文档,了解到v4.x和v5.x版本的差异。v4.x部署模式包括单主、多主、多主多从(异步复制、同步双写),而v5.x新增Local与Cluster模式,主要区别在于Broker和Proxy是否同进程部署。Local模式适合平滑升级,Cluster模式适合高可用需求。不同模式下,集群部署方案大致相同,涵盖单主、多主、多主多从等模式,以满足不同的高可用性和性能需求。
1629 0
|
消息中间件 存储 弹性计算
云消息队列 RabbitMQ 版方案评测
本文评估了阿里云《高弹性,低成本,云消息队列 RabbitMQ 实践》方案,从实践原理理解、部署体验、方案优势展现及业务场景匹配四个方面进行了深入分析。文中指出,该方案在解决消息积压、提高系统稳定性、支持弹性伸缩等方面表现优异,但也提出了在组件功能解释、实战案例提供等方面的改进建议,以期帮助用户更好地理解和应用该技术解决方案。
420 2
下一篇
oss云网关配置