RocketMQ APIs 详解:全面掌握生产者、消费者、管理与扩展接口

RocketMQ API 全面解析

🚀 RocketMQ APIs 详解:全面掌握生产者、消费者、管理与扩展接口

RocketMQ 提供了丰富且灵活的 API 接口,覆盖消息的生产、消费、管理、监控与扩展
无论是 Java 应用还是跨语言集成,都能通过 API 实现高效、可靠的消息交互。

本文将系统化详解 RocketMQ 的核心 API 分类、使用方式、参数说明与最佳实践。


一、RocketMQ API 分类

类别说明典型用途
Producer API消息发送接口发送普通、顺序、事务消息
Consumer API消息消费接口集群消费、广播消费、顺序消费
Admin API运维管理接口Topic 管理、消费者状态查询
REST APIHTTP 接口跨语言调用、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 ConnectorSink 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 APIKafka 客户端可直接接入
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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值