RocketMQ 常见的的 API

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");

说明

  • 只消费 TagATagB 的消息,提高消费端的效率

 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,掌握这些基本上可以应对大部分的开发需求了!🚀

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值