在 RocketMQ 中,“普通消息”指的是最常见、最基础的消息类型,不包含顺序、延迟、事务等特殊特性。普通消息通常用于大多数异步解耦或消息分发的场景,具有高吞吐、低延迟、分布式扩展等优点。下面将为你介绍 RocketMQ 普通消息的基本概念、生产者/消费者用法以及常见注意事项。
1. 核心概念
-
Topic
- 消息的逻辑分组。Producer 往某个 Topic 发送消息,Consumer 从该 Topic 订阅并消费消息。
- 一个 Topic 通常会被切分为多个 Queue(分区)以提升并发处理能力。
-
Tag(标签)
- 进一步对同一 Topic 内的消息进行分类标记,Consumer 可以选择性订阅某些 Tag,实现更细粒度的消息过滤。
- Tag 在物理层面并不会真正隔离数据,仅是一种逻辑标识。
-
Producer(生产者)
- 负责发送消息到 Broker。
- Producer 可以执行同步发送、异步发送或单向发送(one-way)等多种模式,平衡可靠性与性能。
-
Consumer(消费者)
- 从 Broker 拉取消息进行处理。分为以下常见模式:
- Push 模式:内部实际是拉模式,但对用户来说更像是收到回调。
- Pull 模式:显式由应用主动拉取消息(使用相对较少)。
- 消费方式:
- 集群消费 (Cluster):同一个 Consumer Group 下的多个消费者会分摊消息,适合绝大部分业务场景。
- 广播消费 (Broadcast):每个 Consumer 实例都能收到所有消息,适合日志广播、通知广播等场景。
- 从 Broker 拉取消息进行处理。分为以下常见模式:
-
消息可靠性
- 默认情况下 RocketMQ 保证“至少一次投递”,可能存在重复消费,需要业务端做幂等处理。
- 通过同步刷盘+同步复制可以进一步提高数据可靠性,但会牺牲一定性能。
2. Producer 发送普通消息
2.1 同步发送
同步发送是最常见的方式,会等待 Broker 返回发送结果后再进行后续操作,可靠性较高。
DefaultMQProducer producer = new DefaultMQProducer("normal_producer_group");
producer.setNamesrvAddr("127.0.0.1:9876");
producer.start();
try {
for (int i = 0; i < 10; i++) {
Message msg = new Message("NormalTopic", "TagA",
("Hello RocketMQ " + i).getBytes(StandardCharsets.UTF_8)

最低0.47元/天 解锁文章
930

被折叠的 条评论
为什么被折叠?



