单向消息(OneWay Message)是 RocketMQ 轻量化的消息发送模式,生产者仅发送消息,不等待 Broker 响应、无回调通知、不关注消息是否送达。该模式无网络等待开销,吞吐量极高,适用于对可靠性要求低、追求极致性能的场景,例如日志采集、用户行为埋点、非核心数据上报等。
创建专用服务类,注入 RocketMQTemplate,封装标准化单向消息发送方法:
package com.lusifer.sca.message.producer.service;
import lombok.RequiredArgsConstructor;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.stereotype.Service;
/** 单向消息发送服务 */
@Service
@RequiredArgsConstructor
public class OneWayMessageService {
private final RocketMQTemplate rocketMQTemplate;
}package com.lusifer.sca.message.producer.test;
import com.lusifer.sca.message.producer.service.OneWayMessageService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
@Slf4j
public class OneWayMessageTest {
@Resource private OneWayMessageService oneWayMessageService;
}RocketMQ 提供极简 API 实现单向消息,支持普通文本、带标签、Java 对象三种常用格式,无需手动序列化。
/**
* 发送基础单向消息(无标签)
* @param topic 消息主题
* @param message 消息内容
*/
public void sendOneWay(String topic, String message) {
rocketMQTemplate.sendOneWay(topic, message);
}/**
* 发送带标签的单向消息
* @param topic 消息主题
* @param tag 消息标签
* @param message 消息内容
*/
public void sendOneWayWithTag(String topic, String tag, String message) {
// 格式:Topic:Tag
String destination = topic + ":" + tag;
rocketMQTemplate.sendOneWay(destination, message);
}/**
* 发送对象类型的单向消息
* @param topic 消息主题
* @param obj 消息对象
*/
public void sendOneWayObject(String topic, Object obj) {
rocketMQTemplate.sendOneWay(topic, obj);
}单向消息无需等待响应,单元测试无需添加 Thread.sleep,执行效率极高。
@Test
public void testOneWayWithTag() {
oneWayMessageService.sendOneWayWithTag("test-topic", "tagA", "Hello RocketMQ OneWay!");
log.info("单向消息已发送,无需等待响应");
}@Test
public void testOneWayObject() {
MyObject myObject = new MyObject("日志用户", 25);
oneWayMessageService.sendOneWayObject("test-topic", myObject);
log.info("对象类型单向消息已发送");
}核心特点
无等待:发送后立即返回,不阻塞主线程;
无响应:不接收 Broker ACK,无失败回调;
高吞吐:性能远超同步 / 异步消息,是 RocketMQ 最快的发送模式。
适用场景
日志收集、用户行为埋点上报;
非核心监控数据、统计数据传输;
允许少量消息丢失的业务场景。
不适用场景
订单、支付、交易等核心可靠业务;
要求消息必达、需要重试机制的场景。