专业的编程技术博客社区

网站首页 > 博客文章 正文

RocketMQ 消费模式:集群消费模式和广播消费模式

baijin 2025-01-12 11:14:56 博客文章 6 ℃ 0 评论

RocketMQ 消费模式有几种?

1. 集群消费模式

一条消息只会被同Consumer Group中的一个Consumer消费。多个Consumer Group同时消费一个Topic时,每个Consumer Group都会有一个Consumer消费到数据。

2. 广播消费模式

消息将对一 个Consumer Group 下的各个 Consumer 实例都消费一遍。即使这些 Consumer 属于同一个Consumer Group ,消息也会被 Consumer Group 中的每个 Consumer 都消费一次。

一、集群消费模式

适用于消费端集群化部署,每条消息只需要被处理一次的场景。此外,由于消费进度在服务端维护,可靠性更高。具体消费示例如下图所示。


之前的示例默认都是集群消费模式。如果没有指定消费模式,默认的是集群消费模式。


二、广播消费模式

适用于消费端集群化部署,每条消息需要被集群下的每个消费者处理的场景。具体消费示例如下图所示。


注意:广播消费模式下不支持顺序消息。广播消费模式下不支持重置消费位点。


三、广播消费模式开发实践

在示例项目中新建message-model模块,添加一个新的消费监听器,如图所示。


创建消息监听器BroadcastListener类,代码如下所示:

@Slf4j
@Component
@RocketMQMessageListener(
 topic = AppConstant2.GENERAL_TOPIC,
 messageModel = MessageModel.BROADCASTING, // 指定为广播消费
 consumerGroup = "ArchNoteConsumerGroup"
)
public class BroadcastListener implements RocketMQListener {
 @Override
 public void onMessage(Object message) {
 System.out.println("接收消息 - 广播模式:" + message);
 }
}

我们通过messageModel = MessageModel.BROADCASTING 指定消费模式为广播消费。


然后,将之前的SpringConsumer 消息监听器的消费模式,也临时调整为广播模式:messageModel = MessageModel.BROADCASTING,如图所示:


现在,在一个消费者组(Consumer Group)ArchNoteConsumerGroup中,有两个消费者,并且采用广播模式。


启动两个Spring Boot应用,通过RocketMQ Dashboard 可视化页面-Consumer消费者,可以看到ArchNoteConsumerGroup 组中,有两个连接的Client,消费模式为BROADCASTING,如图所示:


该消费组(ArchNoteConsumerGroup)中有两个消费者,如图所示:



此时, 向对应的topic(book-topic)中发送消息,两个消费者都会收到同一条消息,并输出消息内容,如图所示:


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表