1. 生产者 API
1.1 send(同步发送消息)
SendResult sendResult = producer.send(new Message("TopicTest", "Hello RocketMQ".getBytes()));
-
说明:同步发送消息,等待
SendResult返回,适用于对可靠性要求较高的场景。 -
适用场景:订单系统、支付系统
1.2 sendOneway(单向发送消息)
producer.sendOneway(new Message("TopicTest", "Hello RocketMQ Oneway".getBytes()));
-
说明:不等待服务器响应,直接发送,适用于不关心发送结果的场景。
-
适用场景:日志收集、监控上报。
1.3 sendAsync(异步发送消息)
producer.send(new Message("TopicTest", "Hello RocketMQ Async".getBytes()), new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("发送成功:" + sendResult);
}
@Override
public void onException(Throwable e) {
System.err.println("发送失败:" + e.getMessage());
}
});
-
说明:异步发送消息,
SendCallback处理成功或失败回调。 -
适用场景:大批量日志采集、秒杀系统。
1.4 发送带 Tag 的消息
Message message = new Message("TopicTest", "TagA", "Hello RocketMQ with Tag".getBytes());
SendResult sendResult = producer.send(message);
说明:Tag 主要用于 消费端过滤,可以让不同的消费者消费不同的 Tag 消息。
1.5 发送带 Key 的消息
Message message = new Message("TopicTest", "TagA", "OrderID123", "Hello RocketMQ with Key".getBytes());
SendResult sendResult = producer.send(message);
说明:
-
Key主要用于 消息查询,可以用Message Key查找某条消息。
1.6 发送顺序消息
Message message = new Message("OrderTopic", "TagA", "OrderID123", "Hello Order".getBytes());
producer.send(message, new MessageQueueSelector() {
@Override
public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
int queueIndex = ((Integer) arg) % mqs.size();
return mqs.get(queueIndex);
}
}, 0);
说明:
-
通过
MessageQueueSelector选择固定队列,保证相同arg的消息进入同一个队列,实现局部有序。
1.7 发送事务消息
TransactionSendResult sendResult = transactionProducer.sendMessageInTransaction(
new Message("TransactionTopic", "Hello Transaction".getBytes()), null);
-
说明:支持 分布式事务,发送事务消息后,本地事务成功才会最终投递。
2. 消费者 API
2.1 subscribe(订阅主题)
consumer.subscribe("TopicTest", "*");
说明:订阅某个 Topic,* 代表 订阅所有 Tag。
2.2 订阅指定 Tag 的消息
consumer.subscribe("TopicTest", "TagA || TagB");
说明:
-
只消费
TagA或TagB的消息,提高消费端的效率
2.3 registerMessageListener(监听消息)
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;
}
});
说明:
-
并发消费(多个线程消费)。
-
返回
CONSUME_SUCCESS表示消费成功。
2.4 顺序消费
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;
}
});
说明:
-
同一个
MessageQueue内部消息有序,不会多线程并发消费。
2.5 消费重试
if (failTimes > 3) {
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
说明:
-
消费失败时,返回
RECONSUME_LATER进行重试。 -
RocketMQ 默认会 重试 16 次,之后 进死信队列(DLQ)。
3. 管理 API
3.1 通过 Message Key 查询消息
QueryResult queryResult = admin.queryMessage("TopicTest", "OrderID123", 10, System.currentTimeMillis() - 1000 * 60, System.currentTimeMillis());
for (MessageExt msg : queryResult.getMessageList()) {
System.out.println(new String(msg.getBody()));
}
说明:
-
通过
Key查询消息,10表示最多查询 10 条
3.2 查询消费进度
long offset = admin.maxOffset("TopicTest", 0);
System.out.println("最新的消费进度:" + offset);
说明:查询 TopicTest 第 0 个队列的 消费进度。
3.3 查询 Broker 状态
BrokerStatsData stats = admin.viewBrokerStatsData("127.0.0.1:10911", "TOPIC_PUT_NUMS");
System.out.println("Broker 生产消息数量:" + stats.getStatsMinute().getSum());
说明:
-
TOPIC_PUT_NUMS获取 消息发送数。 -
TOPIC_GET_NUMS获取 消息消费数。
总结
| API | 作用 | 适用场景 |
|---|---|---|
send | 同步发送消息 | 订单、支付 |
sendOneway | 单向发送消息 | 日志收集、监控 |
sendAsync | 异步发送消息 | 大数据、秒杀系统 |
sendMessageWithTag | 发送带 Tag 消息 | 让 Consumer 过滤消息 |
sendMessageWithKey | 发送带 Key 消息 | 查询历史消息 |
sendMessageInTransaction | 事务消息 | 分布式事务 |
subscribe | 订阅主题 | 消费端 |
registerMessageListener | 监听消息 | 消费端处理 |
queryMessage | 查询历史消息 | 消息溯源 |
viewBrokerStatsData | 查看 Broker 状态 | 监控管理 |
以上是 RocketMQ 最常用的 API,掌握这些基本上可以应对大部分的开发需求了!🚀
1万+

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



