返回

用RocketMQTemplate 畅游消息世界,轻松玩转各种消息类型

后端

RocketMQTemplate:Spring Boot 中的消息队列神器

普通消息发送

RocketMQTemplate 让普通消息发送变得轻而易举,只需指定主题和消息体即可。

rocketMQTemplate.syncSend(topic, message);

过滤消息发送

过滤消息允许您根据消息属性进行筛选,确保消费者仅接收符合条件的消息。

Map<String, String> properties = new HashMap<>();
properties.put("key", "value");
rocketMQTemplate.syncSend(topic, message, properties);

同步消息发送

同步消息发送会等待服务器响应,保证消息已成功发送。

SendResult result = rocketMQTemplate.syncSend(topic, message, 3000);
if (result.getStatus() == SendStatus.SEND_OK) {
    System.out.println("消息发送成功");
}

延时消息发送

延时消息可以延迟指定时间后发送,适合定时任务场景。

rocketMQTemplate.syncSend(topic, message, delayTime);

批量消息发送

批量消息发送一次性发送多条消息,提高效率。

List<String> messages = new ArrayList<>();
messages.add("Hello RocketMQ!");
messages.add("Hello World!");
rocketMQTemplate.syncSendBatch(topic, messages);

异步消息发送

异步消息发送不会等待服务器响应,提高发送速度。

SendCallback callback = new SendCallback() {
    @Override
    public void onSuccess(SendResult sendResult) {
        System.out.println("消息发送成功");
    }
    @Override
    public void onException(Throwable e) {
        System.out.println("消息发送失败");
    }
};
rocketMQTemplate.asyncSend(topic, message, callback);

单向消息发送

单向消息发送不会等待服务器响应或触发回调,适合对发送结果不关心的场景。

rocketMQTemplate.sendOneWay(topic, message);

顺序消息发送

顺序消息确保消息按顺序发送和消费,适合对消息顺序有要求的场景。

rocketMQTemplate.sendOrderly(topic, message, businessKey);

事务消息发送

事务消息保证消息发送与本地事务的原子性,适合对数据一致性要求高的场景。需要实现 TransactionListener 接口。

public class MyTransactionListener implements TransactionListener {
    // ...
}
rocketMQTemplate.sendMessageInTransaction(topic, message, transactionListener, null);

源码分析

RocketMQTemplate 源代码位于 rocketmq-spring-boot-starter 项目中,提供丰富的注释和示例,帮助您深入理解其实现细节。

总结

RocketMQTemplate 是 Spring Boot 中使用 RocketMQ 进行消息发送的利器,提供丰富的 API 和支持多种消息发送方式。掌握 RocketMQTemplate 的使用,轻松将 RocketMQ 集成到您的项目中,提升消息队列开发效率。

常见问题解答

  • Q:如何使用 RocketMQTemplate 发送普通消息?

    • A: 指定主题和消息体,调用 syncSend() 方法即可。
  • Q:如何发送带有属性的过滤消息?

    • A: 在发送时指定消息属性的键值对即可。
  • Q:如何等待服务器响应以确保消息已成功发送?

    • A: 使用 syncSend() 方法并指定超时时间即可。
  • Q:如何发送延迟消息?

    • A: 在发送时指定延时时间即可。
  • Q:如何一次性发送多条消息以提高效率?

    • A: 使用 syncSendBatch() 方法即可。