开发者社区 > 云原生 > 云消息队列 > 正文

RocketMQ不知道通过什么样的方式能够在用户代码无侵入的情况下支持 rocket mq ?

RocketMQ我们在公司内部想通过 service mesh 的方式实现流量的全链路灰度,在支持 rocketmq 协议时,遇到一些困难,不知道通过什么样的方式能够在用户代码无侵入的情况下支持 rocket mq 消息的灰度和 生产的隔离?

展开
收起
真的很搞笑 2023-12-13 21:44:51 89 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在RocketMQ中,可以通过设置特定的user-property作为灰度标记来区分灰度消息和生产消息。同时,RocketMQ的消费者也需要开启消息灰度功能,才能使消息灰度生效。

    对于消费者灰度的处理,既支持客户端过滤也支持服务端过滤。在开源的RocketMQ client中有FilterMessageHook这一机制,它能进行逻辑处理,通过该过滤器可以将本环境不需要消费的消息直接过滤掉。此外,正式环境和灰度环境的消费者会分别使用不同的 consumer group,使其 offset 分开,然后在 FilterMseeageHook 中加入对应逻辑,即可将灰度环境中收到所有非灰度的消息过滤掉。

    这种方式可以在用户代码无侵入的情况下实现 RocketMQ 消息的灰度和生产的隔离。

    2023-12-14 21:24:06
    赞同 展开评论 打赏
  • 在通过service mesh实现RocketMQ流量的全链路灰度时,确实可能会遇到一些困难。为了在用户代码无侵入的情况下支持RocketMQ消息的灰度和生产的隔离,可以考虑以下方案:

    • 使用RocketMQ的Sidecar模式:如前面提到的,Sidecar模式是一种将业务逻辑与消息中间件解耦的方式。你可以在Sidecar中处理RocketMQ的消息,并根据需要实现灰度消息的隔离和处理。通过配置Sidecar与RocketMQ的交互,你可以控制消息的路由和分发,从而实现灰度发布和隔离。
    • 使用RocketMQ的路由规则:RocketMQ支持基于消息属性或标签的路由规则。你可以根据需要定义路由规则,将特定属性的消息路由到特定的Broker或队列,从而实现灰度消息的隔离。通过配置路由规则,你可以将灰度消息发送到特定的Broker或队列,而生产消息则发送到其他Broker或队列。
    • 使用RocketMQ的消费者组和标签:如前面所述,RocketMQ支持消费者组和标签的概念。你可以为每个泳道创建一个唯一的消费者组或标签,并将生产者发送消息时指定该标签。然后,将具有相同标签的消费者分配到同一组,这样它们只能消费属于该标签的消息。通过这种方式,可以实现不同泳道之间的消费者隔离,确保每个消费者只消费其所属泳道的消息。
    2023-12-14 11:54:13
    赞同 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载