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

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

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

展开
收起
十一0204 2023-04-03 16:33:38 191 0
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.io/

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载