配置消息灰度

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

背景信息

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

  • 当消息的消费逻辑进行了修改时,这时候希望通过小流量的方式来验证新的消息消费逻辑的正确性,这时会对消息的灰度有诉求。

  • 在消息消费时,可能会产生新的RPC调用,如果没有在消息这一环去遵循之前设定好的全链路流量控制的规则,会导致通过消息产生的这部分流量“逃逸”,从而导致全链路灰度的规则遭到破坏,导致出现不符合预期的情况。

使用说明

  • 使用此功能您无需修改应用的代码和配置。

  • 消息类型目前只支持RocketMQ,包含开源版本和阿里云商业版。

    • 如果您使用开源RocketMQ,则RocketMQ Server和RocketMQ Client都需要使用4.5.0及以上版本。

    • 如果您使用阿里云RocketMQ 4.x 系列,需要使用铂金版,RocketMQ 5.x 系列无版本要求。Ons Client使用1.8.0.Final及以上版本。

  • 消息的生产者和消息的消费者,需要同时开启消息灰度,消息的灰度功能才能生效。

  • 开启消息灰度后,MSE会修改消息的Consumer Group。例如原来的Consumer Group为group1,环境标签为gray,开启消息灰度后,则group1会被修改成group1_gray,如果您使用的是阿里云RocketMQ ,请提前创建好group1

  • 默认使用SQL92的过滤方式,如果您使用的是开源RocketMQ,开源的RocketMQ Server端需要支持SQL92过滤,且在服务端开启此功能(即在broker.conf中配置enablePropertyFilter=true)。

    说明

    如果您的应用场景不满足支持SQL92过滤的条件,那么可以使用通过FilterMessageHook在消费者过滤的方式,此方式需要在所有的应用中打开消息灰度并且选择客户端过滤方式。因为消费者过滤的方式会在每个环境都处理全量的消息,对消息的生产者和消费者压力都比较大,不推荐在生产中使用此模式。

开启消息灰度

  1. 登录MSE治理中心控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择治理中心 > 应用治理

  3. 应用列表页面,单击目标应用的资源卡片,然后在左侧导航栏单击流量治理

  4. 流量治理页面,单击消息灰度页签。

  5. 未打标环境忽略的标签右侧单击编辑,打开开启消息灰度右侧的开关,然后单击确定

    • 如果您不希望未打标环境消费其他环境生产出来的消息,请在未打标环境忽略的标签中选择需要忽略的标签。

    • 如果您希望基线环境能够智能地识别其他环境是否存在消费者,在不存在消费者时消费对应环境的消息,在存在消费者时忽略对应环境的消息,请在未打标环境忽略的标签中输入自动识别

    说明
    • 应用在开启消息灰度后,需要重启才能生效。

    • 未打标环境忽略的标签支持动态生效,不需要重启应用。

    • 当消息的生产者和消费者都开启消息灰度,并且都重启生效之后。消息消费者的行为如下:

      • 未打标的环境节点默认会消费所有环境生产出来的消息。

      • 打标环境节点只消费在相同标签环境生产出来的消息。