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

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

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

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

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

相关产品

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

    热门文章

    相关电子书

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