RocketMQ我们在公司内部想通过 service mesh 的方式实现流量的全链路灰度,在支持 rocketmq 协议时,遇到一些困难,不知道通过什么样的方式能够在用户代码无侵入的情况下支持 rocket mq 消息的灰度和 生产的隔离?
在RocketMQ中,可以通过设置特定的user-property作为灰度标记来区分灰度消息和生产消息。同时,RocketMQ的消费者也需要开启消息灰度功能,才能使消息灰度生效。
对于消费者灰度的处理,既支持客户端过滤也支持服务端过滤。在开源的RocketMQ client中有FilterMessageHook这一机制,它能进行逻辑处理,通过该过滤器可以将本环境不需要消费的消息直接过滤掉。此外,正式环境和灰度环境的消费者会分别使用不同的 consumer group,使其 offset 分开,然后在 FilterMseeageHook 中加入对应逻辑,即可将灰度环境中收到所有非灰度的消息过滤掉。
这种方式可以在用户代码无侵入的情况下实现 RocketMQ 消息的灰度和生产的隔离。
在通过service mesh实现RocketMQ流量的全链路灰度时,确实可能会遇到一些困难。为了在用户代码无侵入的情况下支持RocketMQ消息的灰度和生产的隔离,可以考虑以下方案:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/