假设生产者部署10台,只能1台生产者发送有序,限制这1台的行为,一般业务方怎么去做?或者10台服务方

假设生产者部署10台,只能1台生产者发送有序,限制这1台的行为,一般业务方怎么去做?或者10台服务方,自动生成不同的消息组来去做。怎么实现 10台机器里面永远只调用同一台?

展开
收起
十一0204 2023-04-03 16:33:38 221 分享 版权
3 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    使用消息组:为了实现有序性,MQ提供了消息组(Message Group)的概念,即相同消息组 ID 的消息会被顺序处理。因此,可以根据需要设置消息组 ID,确保相同消息组 ID 的消息只能由部署在同一台机器上的生产者发送,实现有序消息的发送。同时,每个消费者只订阅一个 Topic 下的某个 Message Group,保证同一个消息组内的消息只会被一个消费者处理。

    2023-04-24 14:23:53
    赞同 展开评论
  • 意中人就是我呀!

    对于同一个消息组,如果有多个producer可能会产生。那么这个先后顺序是需要这些producer自己协调。mq不理解其中的语义,只能以到达服务端为准。

    所以,从定义角度,一个比较严谨保守的说法就是单一producer和server之间的同步通信一定是有顺序意义的。除此之外都是没有意义的,或者说这个意义是业务自己协调。 10台机器里面永远只调用同一台直接注册中心里面就可以搞定,或者zk 分布式锁 。此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”

    2023-04-05 09:10:33
    赞同 展开评论
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    你好,这种场景可以考虑在RocketMQ中使用消息队列分组(Message Queue Grouping)的功能。具体实现方式是,将有序消息发送到同一个消息队列分组中,然后让这个消息队列分组只在1台生产者上使用。

    对于10台机器里面永远只调用同一台的问题,要基于负载均衡的方式来解决。在RocketMQ中,可以使用Namesrv地址列表(Name Server Address List)来实现负载均衡。将10台机器的地址都配置到Namesrv地址列表中,然后在Producer端指定负载均衡算法,让Producer自动选择可用的机器来发送消息。

    2023-04-03 17:25:05
    赞同 展开评论

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系列产品 Serverless 化。RocketMQ 中文社区:https://rocketmq-learning.com/

收录在圈子:
+ 订阅
阿里云 云原生应用平台 肩负阿里巴巴集团基础设施云化以及核心技术互联网化的重要职责,致力于打造稳定、标准、先进的云原生产品,成为云原生时代的引领者,推动行业全面想云原生的技术升级,成为阿里云新增长引擎。商业化产品包括容器、云原生中间件、函数计算等。
还有其他疑问?
咨询AI助理