如果您在使用金丝雀发布、全链路灰度以及开发环境隔离等场景中需要使用到消息的灰度,那么您需要开启消息灰度的功能。目前,MSE只支持RocketMQ类型的消息灰度。

背景信息

虽然绝大多数业务场景下对于消息的灰度的要求并不像RPC的要求得这么严格,但是在以下两个场景中,还是会对消息的全链路有一定的诉求。

  • 当消息的消费逻辑进行了修改时,这时候希望通过小流量的方式来验证新的消息消费逻辑的正确性,这时会对消息的灰度有诉求。
  • 在消息消费时,可能会产生新的RPC调用,如果没有在消息这一环去遵循之前设定好的全链路流量控制的规则,会导致通过消息产生的这部分流量“逃逸”,从而导致全链路灰度的规则遭到破坏,导致出现不符合预期的情况。

使用说明

  • 使用此功能您无需修改应用的代码和配置。
  • 消息类型目前只支持RocketMQ,包含开源版本和阿里云商业版。
    • 如果您使用开源RocketMQ,则RocketMQ Server和RocketMQ Client都需要使用4.5.0及以上版本。
    • 如果您使用阿里云RocketMQ,需要使用铂金版,且Ons Client使用1.8.0.Final及以上版本。
  • 消息的生产者和消息的消费者,需要同时开启消息灰度,消息的灰度功能才能生效。
  • 开启消息灰度后,MSE会修改消息的Consumer Group。例如原来的Consumer Group为group1,环境标签为gray,开启消息灰度后,则group会被修改成group1_gray,如果您使用的是阿里云RocketMQ ,请提前创建好group
  • 默认使用SQL92的过滤方式,如果您使用的开源RocketMQ,开源的RocketMQ Server端需要支持SQL92过滤,且在服务端开启此功能(即在broker.conf中配置enablePropertyFilter=true)。
    说明 如果您的应用场景不满足支持SQL92过滤的条件,那么可以使用通过FilterMessageHook在消费者过滤的方式,此方式需要在所有的应用中配置环境变量profiler.micro.service.mq.server.gray.enable=false。因为消费者过滤的方式会在每个环境都处理全量的消息,对消息的生产者和消费者压力都比较大,不推荐在生产中使用此模式。

开启消息灰度

  1. 登录MSE治理中心控制台
  2. 在顶部菜单栏选择地域。
  3. 在左侧导航栏选择微服务治理中心 > 应用信息 > 应用列表
  4. 应用列表页面单击目标应用名称。在应用详情页面单击消息灰度页签。
  5. 未打标环境忽略的标签右侧单编辑,打开开启消息灰度右侧的开关,然后单击确定
    • 如果您不希望未打标环境消费其他环境生产出来的消息,请在未打标环境忽略的标签中选择需要忽略的标签。
    • 如果您希望基线环境能够智能地识别其他环境是否存在消费者,在不存在消费者时消费对应环境的消息,在存在消费者时忽略对应环境的消息,请在未打标环境忽略的标签中输入AUTO_DETECT
    配置消息灰度
    说明
    • 应用在开启消息灰度后,需要重启才能生效。
    • 未打标环境忽略的标签支持动态生效,不需要重启应用。
    • 当消息的生产者和消费者都开启消息灰度,并且都重启生效之后。消息消费者的行为如下:
      • 未打标的环境节点默认会消费所有环境生产出来的消息。
      • 打标环境节点只消费相同标签环境生产出来的消息。