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

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

RocketMQ我们在公司内部想通过 service mesh 的方式实现流量的全链路灰度,在支持 rocketmq 协议时,遇到一些困难,不知道通过什么样的方式能够在用户代码无侵入的情况下支持 rocket mq 消息的灰度和 生产的隔离?参考了这边文章: https://developer.aliyun.com/article/1262945![1e2a16f332bd6560e01e4facffe1b947.png](https://ucc.alicdn.com/pic/developer-ecology/wyvq5mjsckydw_fcbfeee015954f2b883c1e076715bfda.png)

展开
收起
真的很搞笑 2023-12-13 21:44:51 64 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
    赞同 展开评论 打赏

多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖多行业。

相关产品

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

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