RocketMQ使用广播消息

说明

RocketMQ消息模式主要有两种:
(1)、MessageModel.CLUSTERING:集群模式。同一消费者组内的每个消费者,只消费到Topic的一部分消息,所有消费者消费的消息加起来就是Topic的所有消息。
(2)、MessageModel.BROADCASTING:广播模式。同一消费者组内的每个消费者,都消费到Topic的所有消息。如Topic有100条消息,则同个消费者组下的所有消费者都能消费到100条消息。

消息广播,主要配置在于消费者通过配置消息模式MessageModel)为MessageModel.BROADCASTING实现。

生产端

@Test
public void sendMessage() throws Exception {
    DefaultMQProducer defaultMQProducer = RocketMqUtil.getDefaultMQProducer();
    Message message = new Message(RocketMqUtil.TOPIC, "broadcasting",
            "broadcasting-message".getBytes(Charset.forName("UTF-8")));
    //按正常操作发送消息
    SendResult sendResult = defaultMQProducer.send(message);
    log.info("发送消息结果:{}", sendResult.getSendStatus().name());
}

生产端按正常发送逻辑发送消息即可。

消费端

@Test
public void consumer() throws Exception {
    DefaultMQPushConsumer defaultMQPushConsumer = RocketMqUtil.getDefaultMQPushConsumer();
    defaultMQPushConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
    defaultMQPushConsumer.subscribe(RocketMqUtil.TOPIC, "*");
    //设置消费消息为广播模式
    defaultMQPushConsumer.setMessageModel(MessageModel.BROADCASTING);
    defaultMQPushConsumer.registerMessageListener(new MessageListenerConcurrently() {
        @Override
        public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
            msgs.stream().map(MessageExt::getBody).map(String::new).forEach(body -> log.info("消息内容:{}", body));
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        }
    });
    defaultMQPushConsumer.start();
    Thread.sleep(5000L);
    defaultMQPushConsumer.shutdown();
}

消费端,需要设置Consumer对象消费消息的消息模式为MessageModel.BROADCASTING。

总结

消息广播,主要在消费端通过对Consumer对象的消息模式(MessageModel)属性设置为MessageModel.BROADCASTING。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐观男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值