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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
消息中间件 存储 Kafka
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿一下RocketMQ和Kafka索引设计原理和方案
48 1
|
2月前
|
消息中间件 Kubernetes Docker
KubeSphere 核心实战之三【在kubesphere平台上部署ElasticSearch、应用商店部署RabbitMQ和应用市场部署Zookeeper】(实操篇 3/4)
KubeSphere 核心实战之三【在kubesphere平台上部署ElasticSearch、应用商店部署RabbitMQ和应用市场部署Zookeeper】(实操篇 3/4)
41 0
|
3月前
|
Java 物联网 网络安全
mqtt问题之STM32F103GPRS模组如何接入物理网平台
MQTT接入是指将设备或应用通过MQTT协议接入到消息服务器,以实现数据的发布和订阅;本合集着眼于MQTT接入的流程、配置指导以及常见接入问题的解决方法,帮助用户实现稳定可靠的消息交换。
76 2
|
12月前
|
消息中间件 测试技术 RocketMQ
面试官:使用 RocketMQ 怎么进行灰度发布?
今天来聊一聊 RocketMQ 的灰度方案。 灰度发布是指在黑与白之间,平滑过渡的一种发布方式。在大流量的系统中,如果一次升级改造范围比较大,或者影响内容不太确定,一般会采用切量的方式进行升级,这样可以减少生产变更带来的影响。
|
12月前
|
消息中间件 移动开发 运维
《2023云原生实战案例集》——04 互联网——小七手游 MQTT构筑运营平台与游戏端的交互通道
《2023云原生实战案例集》——04 互联网——小七手游 MQTT构筑运营平台与游戏端的交互通道
|
存储 消息中间件 数据库
RocketMQ平台的消息灰度方案(2)
RocketMQ平台的消息灰度方案
404 0
RocketMQ平台的消息灰度方案(2)
|
消息中间件 算法 Java
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
614 1
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
|
消息中间件 Apache RocketMQ
《万亿级数据洪峰下的消息引擎——Apache RocketMQ》电子版地址
万亿级数据洪峰下的消息引擎——Apache RocketMQ
315 0
《万亿级数据洪峰下的消息引擎——Apache RocketMQ》电子版地址
|
消息中间件 存储 缓存
RocketMQ Schema——让消息成为流动的结构化数据
RocketMQ Schema 提供了对消息的数据结构托管服务,同时为原生客户端提供了较为丰富的序列化/反序列化 SDK ,补齐了 RocketMQ 在数据治理和业务上下游解耦方面的短板,让数据成为流动的结构化数据,那么快来了解下实现原理吧~
471 0
RocketMQ Schema——让消息成为流动的结构化数据
|
消息中间件 存储 缓存
简述RocketMQ消息拉取过程【二】
简述RocketMQ消息拉取过程【二】
927 1