源本科技 | 码上会

分布式消息队列 RocketMQ 单向消息

2026/05/30
0
0

引言

单向消息(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 最快的发送模式。

  • 适用场景

    • 日志收集、用户行为埋点上报;

    • 非核心监控数据、统计数据传输;

    • 允许少量消息丢失的业务场景。

  • 不适用场景

    • 订单、支付、交易等核心可靠业务

    • 要求消息必达、需要重试机制的场景。