🚀 RocketMQ APIs 详解:全面掌握生产者、消费者、管理与扩展接口
RocketMQ 提供了丰富且灵活的 API 接口,覆盖消息的生产、消费、管理、监控与扩展。
无论是 Java 应用还是跨语言集成,都能通过 API 实现高效、可靠的消息交互。
本文将系统化详解 RocketMQ 的核心 API 分类、使用方式、参数说明与最佳实践。
一、RocketMQ API 分类
| 类别 | 说明 | 典型用途 |
|---|---|---|
| Producer API | 消息发送接口 | 发送普通、顺序、事务消息 |
| Consumer API | 消息消费接口 | 集群消费、广播消费、顺序消费 |
| Admin API | 运维管理接口 | Topic 管理、消费者状态查询 |
| REST API | HTTP 接口 | 跨语言调用、Web 集成 |
| Connect API | 数据管道接口 | Source/Sink 开发 |
| Streams API | 流处理接口 | 实时计算、聚合 |
| Proxy API | 协议网关接口 | 多协议接入 |
二、1. Producer API:消息生产接口
✅ 核心类:DefaultMQProducer
(1)初始化与启动
DefaultMQProducer producer = new DefaultMQProducer("producer_group");
producer.setNamesrvAddr("192.168.0.1:9876");
producer.start();
(2)发送消息
Message msg = new Message("TOPIC_TEST", "TAG_A", "Hello RocketMQ".getBytes());
// 同步发送
SendResult result = producer.send(msg);
// 异步发送
producer.send(msg, new SendCallback() {
@Override
public void onSuccess(SendResult result) { /* 处理成功 */ }
@Override
public void onException(Throwable e) { /* 处理失败 */ }
});
// 单向发送
producer.sendOneway(msg);
✅ 顺序消息发送
SendResult result = producer.send(msg, new MessageQueueSelector() {
@Override
public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
Integer orderId = (Integer) arg;
return mqs.get(orderId % mqs.size());
}
}, orderId);
✅ 事务消息发送
TransactionMQProducer producer = new TransactionMQProducer("tx_producer");
producer.setTransactionListener(new TransactionListener() {
@Override
public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
// 执行本地事务
return LocalTransactionState.COMMIT_MESSAGE;
}
@Override
public LocalTransactionState checkLocalTransaction(MessageExt msg) {
// 事务状态回查
return LocalTransactionState.COMMIT_MESSAGE;
}
});
producer.start();
// 发送事务消息
TransactionSendResult result = producer.sendMessageInTransaction(msg, null);
三、2. Consumer API:消息消费接口
✅ 核心类:DefaultMQPushConsumer
(1)初始化与订阅
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_group");
consumer.setNamesrvAddr("192.168.0.1:9876");
consumer.subscribe("TOPIC_TEST", "TAG_A || TAG_B"); // 支持 Tag 过滤
consumer.subscribe("ORDER_TOPIC", "*"); // 订阅所有 Tag
✅ 并发消费(高吞吐)
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
for (MessageExt msg : msgs) {
System.out.println("消费消息: " + new String(msg.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
✅ 顺序消费
consumer.registerMessageListener(new MessageListenerOrderly() {
@Override
public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) {
// 保证单线程处理
for (MessageExt msg : msgs) {
System.out.println("顺序消费: " + new String(msg.getBody()));
}
return ConsumeOrderlyStatus.SUCCESS;
}
});
✅ 广播消费
consumer.setMessageModel(MessageModel.BROADCASTING);
四、3. Admin API:运维管理接口
RocketMQ 提供了 MQAdmin 工具类,用于执行运维操作。
✅ 核心类:DefaultMQAdminExt
(1)初始化
DefaultMQAdminExt admin = new DefaultMQAdminExt(5000); // 超时时间
admin.setNamesrvAddr("192.168.0.1:9876");
admin.start();
✅ 常用管理操作
(1)创建 Topic
admin.createAndUpdateTopicConfig("broker-a", "ORDER_TOPIC", 8); // 8 个 Queue
(2)查看消费者进度
ConsumeStats consumeStats = admin.examineConsumeStats("consumer_group");
for (Map.Entry<MessageQueue, OffsetWrapper> entry : consumeStats.getOffsetTable().entrySet()) {
System.out.println("Queue: " + entry.getKey() + ", 消费进度: " + entry.getValue().getConsumerOffset());
}
(3)查询消息
// 按 MsgId 查询
MessageExt msg = admin.viewMessage("192.168.0.10@123456789012345");
System.out.println("消息内容: " + new String(msg.getBody()));
// 按 Key 查询
QueryResult queryResult = admin.queryMessage("ORDER_TOPIC", "ORDER_12345", 32, 0, System.currentTimeMillis());
for (MessageExt msg : queryResult.getMessageList()) {
System.out.println("查询到消息: " + new String(msg.getBody()));
}
(4)Broker 状态
BrokerStatsData stats = admin.fetchBrokerRuntimeStats("broker-a");
System.out.println("写入 TPS: " + stats.getPutTps());
System.out.println("磁盘使用率: " + stats.getCommitLogDiskRatio());
五、4. REST API:HTTP 接口
RocketMQ Proxy 或 RocketMQ Console 提供了 RESTful API,支持跨语言调用。
✅ 典型接口(通过 Proxy)
(1)发送消息
curl -X POST http://proxy:8081/topics/TOPIC_TEST/messages \
-H "Content-Type: application/json" \
-d '{
"body": "Hello from HTTP",
"tags": "TAG_A",
"keys": "KEY_001"
}'
(2)查询消息
curl http://proxy:8081/messages?topic=ORDER_TOPIC&key=ORDER_12345
(3)查看消费者组
curl http://proxy:8081/consumerGroups/order_processor/consumerConnection
✅ 适用于:Web 应用、脚本、跨语言集成。
六、5. Connect API:数据管道接口
用于开发自定义的 Source Connector 和 Sink Connector。
✅ Source Connector 开发
public class MySQLSourceConnector extends SourceConnector {
@Override
public Class<? extends Task> taskClass() {
return MySQLSourceTask.class;
}
@Override
public List<Map<String, String>> taskConfigs(int maxTasks) {
// 拆分为多个任务
}
}
✅ Sink Connector 开发
public class ElasticsearchSinkTask extends SinkTask {
@Override
public void put(Collection<SinkRecord> records) {
// 写入 ES
}
}
✅ 打包为 JAR,放入
plugins/目录即可加载。
七、6. Streams API:流处理接口
✅ 构建流处理拓扑
StreamsBuilder builder = new StreamsBuilder();
KStream<String, String> stream = builder.stream("INPUT_TOPIC");
KStream<String, String> filtered = stream.filter((k, v) -> v.contains("error"));
filtered.to("ERROR_TOPIC");
Topology topology = builder.build();
RocketMQStreams streams = new RocketMQStreams(topology, "app_config");
streams.start();
八、7. Proxy API:多协议接入
RocketMQ Proxy 支持多种协议 API:
| 协议 | 说明 |
|---|---|
| gRPC | 标准 RPC 接口,跨语言友好 |
| Kafka API | Kafka 客户端可直接接入 |
| HTTP/REST | 简单场景使用 |
| 原生协议 | 兼容 RocketMQ 4.x 客户端 |
九、API 最佳实践
| 实践 | 说明 |
|---|---|
| ✅ 生产者设置重试次数 | setRetryTimesWhenSendFailed(2) |
| ✅ 消费者做幂等处理 | 防止重复消费 |
| ✅ 使用连接池管理 Producer/Consumer | 避免频繁创建 |
| ✅ 关键业务使用事务消息 | 保证一致性 |
| ✅ 监控 Admin API 返回结果 | 及时发现异常 |
| ✅ REST API 启用认证 | 防止未授权访问 |
| ✅ Connect/Streams 配置状态后端 | 如 RocksDB |
✅ 总结
| API 类型 | 核心用途 | 推荐场景 |
|---|---|---|
| Producer API | 发送消息 | 所有生产场景 |
| Consumer API | 消费消息 | 实时处理、任务队列 |
| Admin API | 运维管理 | 自动化运维、监控 |
| REST API | 跨语言集成 | Web、脚本、微服务 |
| Connect API | 数据管道 | ETL、数据同步 |
| Streams API | 流式计算 | 实时聚合、过滤 |
| Proxy API | 多协议接入 | 云原生、多语言 |
🚀 一句话总结:
RocketMQ 的 API 体系覆盖了消息全生命周期,
从生产、消费到管理、扩展,
为你构建高可靠、高灵活、可扩展的消息系统提供强大支持。
掌握这些 API,你就能在任何场景下,灵活使用 RocketMQ。
RocketMQ API 全面解析
1万+

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



