如果您在全链路灰度以及开发环境隔离等场景中需要使用到消息的灰度,那么您需要开启消息灰度的功能。目前,MSE只支持RocketMQ类型的消息灰度。
背景信息
虽然绝大多数业务场景下对于消息的灰度的要求并不像RPC的要求那么严格,但是在以下两个场景中,还是会对消息的全链路有一定的诉求。
当消息的消费逻辑进行了修改时,希望通过小流量的方式来验证新的消息消费逻辑的正确性,这时会对消息的灰度有诉求。
在消息消费时,可能会产生新的RPC调用,如果没有在消息这一环遵循之前设定好的全链路流量控制的规则,会导致通过消息产生的这部分流量“逃逸”,从而破坏全链路灰度的规则,导致出现不符合预期的情况。
功能原理
MSE 服务治理消息灰度功能是在应用发送消息的过程中,在消息属性中添加当前环境信息。在消费消息的过程中,基于消息属性中的环境信息进行过滤。
默认情况下开启消息灰度以后,基线环境生产者应用生产的消息,只有基线环境消费者进行消费。灰度环境生产者应用生产的消息,基线环境消费者和对应灰度环境消费者均会进行消费,且基线环境消费者和对应灰度环境消费者会独立消费同一条消息两次。
如果您希望灰度环境生产者应用生产的消息只有对应灰度环境消费者进行消费,请参考配置基线环境忽略灰度消息。
使用限制
框架支持情况
消息类型目前只支持RocketMQ,包含开源版本和阿里云商业版。
对于 RocketMQ Server:
如果您使用开源版本,RocketMQ Server需要使用4.5.0及以上版本。
如果您使用阿里云RocketMQ 4.x 系列,需要使用铂金版才能开启服务端过滤。对于其他版本,您可以使用客户端过滤能力。
如果您使用阿里云RocketMQ 5.x 系列,服务端过滤和客户端过滤均支持。
对于 RocketMQ Client:
如果您使用的客户端为阿里云 RocketMQ 提供的 Ons Client,支持的 Ons Client 版本范围为 1.x 系列,要求大于 1.8.0.Final 。
如果您使用的客户端为开源 RocketMQ 提供的
org.apache.rocketmq:rocketmq-client
,支持的org.apache.rocketmq:rocketmq-client
版本范围为 4.x 系列,要求大于 4.2.0。该客户端支持服务端和客户端过滤。如果您使用的客户端为开源 RocketMQ 提供的
org.apache.rocketmq:rocketmq-client-java
,支持的org.apache.rocketmq:rocketmq-client
版本范围为 5.x 系列,且 MSE Agent 版本需要大于等于 4.3.0 版本。该客户端支持服务端和客户端过滤。关于开源 RocketMQ 提供的 SDK 差异,您可以参考RocketMQ 官方说明。
目前 MSE Agent 暂不支持事务消息。
功能使用限制
如果您需要使用消息灰度,必须在 MSE 服务治理中同时开启消息生产者和消息消费者的消息灰度功能。如果有一方没有开启,消息灰度功能均不生效。
开启消息灰度后,MSE Agent会修改灰度环境消息消费者的
Consumer Group
。修改规则为:对于灰度环境在原
Consumer Group
后拼接_tag
,其中tag
为对应的环境标签。例如:原来的
Consumer Group
为group1
,环境标签为gray
。开启消息灰度后,Consumer Group
会从group1
被修改成group1_gray
。如果您使用的是阿里云RocketMQ ,请提前创建好对应灰度环境的
Consumer Group
。
MSE 使用SQL92的过滤方式实现服务端过滤,如果您使用的是开源RocketMQ 4.x,需要在RocketMQ Server端开启SQL92过滤支持(即在broker.conf中配置
enablePropertyFilter=true
)。如果您的应用场景不满足支持SQL92过滤的条件,可以使用消费端过滤的能力。此方式需要在开启 MSE 服务治理消息灰度时选择客户端过滤方式。请注意消费者过滤的方式会在每个环境都处理全量的消息,对消息的生产者和消费者压力都比较大,不推荐在生产中使用客户端过滤方式。
开启消息灰度
登录MSE治理中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择治理中心 > 应用治理。
在应用列表页面,单击目标应用的资源卡片,然后在左侧导航栏单击流量治理。
在流量治理页面,单击消息灰度页签。
在开启消息灰度右侧单击编辑,打开开启消息灰度右侧的开关,然后单击确定。
修改消息灰度开关配置以后,无论使用客户端过滤还是服务端过滤,需要重启对应应用的所有节点才能正式生效。
消息灰度作为全链路灰度能力的一个子功能,建议开启消息灰度并配置好全链路灰度的相关能力,以获得最佳的使用体验。
基线环境忽略灰度消息
如果您希望灰度环境生产者应用生产的消息只有对应灰度环境消费者进行消费,则需要配置基线环境消费者忽略对应标签的灰度环境的消息。这种情况下,基线环境消费者将只消费基线环境和不在忽略标签环境的消息。
配置方式如下:
登录MSE治理中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择治理中心 > 应用治理。
在应用列表页面,单击目标应用的资源卡片,然后在左侧导航栏单击流量治理。
在流量治理页面,单击消息灰度页签。
在基线环境忽略的标签右侧单击编辑,选择对应基线环境所需要忽略的灰度环境标签,然后单击确定。
修改基线环境忽略的标签动态生效,不需要重启应用。
由于基线环境不再消费忽略标签环境的消息,如果对应灰度环境消费者全部下线,则对应灰度环境生产者生产的所有消息将无消费者可以处理。
- 本页导读 (1)
- 背景信息
- 功能原理
- 使用限制
- 框架支持情况
- 功能使用限制
- 开启消息灰度
- 基线环境忽略灰度消息