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

RocketMQ怎么区分灰度消息和生产消息呢? properties 加特殊标记的方式 ?

RocketMQ怎么区分灰度消息和生产消息呢? properties 加特殊标记的方式 ?可以对业务代码加 sidecar, 在 sidecar 中做一些处理

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

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

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

    这种方式在大流量的系统中尤其有用,如果一次升级改造范围比较大,或者影响内容不太确定,一般会采用切量的方式进行升级,这样可以减少生产变更带来的影响。

    2023-12-14 21:24:25
    赞同 展开评论 打赏
  • RocketMQ可以通过在消息属性(message properties)中添加特殊标记来区分灰度消息和生产消息。在生产环境中,你可以在发送消息时,将特定的属性或标记添加到消息中,例如"isGray=true"。

    对于业务代码的处理,你可以考虑使用Sidecar模式。Sidecar模式是一种将业务逻辑与消息中间件解耦的方式,它允许你在消息中间件外部处理业务逻辑。

    在Sidecar中,你可以对接收到的消息进行预处理,根据消息属性中的标记来判断是否为灰度消息。如果是灰度消息,你可以执行一些特定的逻辑,例如模拟测试、验证或其他灰度相关的操作。对于非灰度消息,你可以将它们正常传递给业务代码进行处理。

    使用Sidecar模式的好处是,你可以将业务逻辑与消息中间件解耦,使得业务代码更加专注于业务逻辑的实现,而不需要关心消息中间件的细节。同时,通过在Sidecar中处理灰度消息,你可以更加灵活地控制灰度发布的流程,并且可以根据需要进行灰度测试或验证。

    需要注意的是,使用Sidecar模式需要对RocketMQ和Sidecar进行相应的配置和开发工作,并且需要根据实际需求进行适当的调整和优化。

    2023-12-14 11:50:37
    赞同 展开评论 打赏
  • 在properties里面加 灰度标识
    ,此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”

    2023-12-14 07:44:27
    赞同 展开评论 打赏

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

相关产品

  • 云消息队列 MQ
  • 热门讨论

    热门文章

    相关电子书

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