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

在RocketMQ中这些设置了messageGroup的一堆消息会路由到同一个吗?

在RocketMQ中关于顺序消息的生产和消费,版本5.0
设置了同一个messageGroup的一堆消息,假设有多个生产者,这些设置了messageGroup的一堆消息会路由到同一个messageQueue吗?

展开
收起
冲冲冲c 2024-07-01 22:39:52 54 0
2 条回答
写回答
取消 提交回答
  • 是的,你的理解适用于版本5.0及之后的RocketMQ。在5.0及之后的RocketMQ中,如果多个生产者发送的消息设置了相同的messageGroup,这些消息将会被路由到同一个messageQueue中,以此来保证消息的顺序性。确保相同messageGroup的消息能够按照先进先出的顺序进行处理。

    2024-07-02 09:26:55
    赞同 2 展开评论 打赏
  • 北京阿里云ACE会长

    RocketMQ 会根据 messageGroup 进行哈希,然后对队列数量进行取模运算,以决定消息应该发送到哪个队列。这样,相同 messageGroup 的消息会被分配到同一个队列。

    虽然 RocketMQ 支持消息顺序性,但在实际应用中,还需要考虑故障转移和容错机制,以确保系统的高可用性。

    DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
    producer.start();
    try {
        String[] tags = new String[] {"TagA", "TagB", "TagC", "TagD"};
        for (int i = 0; i < 100; i++) {
            int orderId = i % 10; // 模拟订单ID
            String messageGroup = "your_message_group_name"; // 指定 messageGroup
            String msgContent = "Hello RocketMQ " + (i + 1);
            Message msg = new Message("TopicTest", tags[i % tags.length], messageGroup, msgContent.getBytes(RemotingHelper.DEFAULT_CHARSET));
            SendResult sendResult = producer.send(msg, new MessageQueueSelector() {
                @Override
                public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
                    Integer id = (Integer) arg;
                    int index = id % mqs.size();
                    return mqs.get(index);
                }
            }, orderId);
            System.out.printf("%s%n", sendResult);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        producer.shutdown();
    }
    
    2024-07-02 08:45:42
    赞同 3 展开评论 打赏

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

相关产品

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

    热门文章

    相关电子书

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