发送与接收广播消息

最近更新时间:2025-06-10 16:17:03

我的收藏

操作场景

本文以调用 Java SDK 为例介绍通过开源 SDK 实现广播消息收发的操作过程。

前提条件

下载 Demo或者前往GitHub 项目

操作步骤

步骤1:安装 Java 依赖库

在 Java 项目中引入相关依赖,以 maven 工程为例,在 pom.xml 添加以下依赖:
说明:
依赖版本要求 ≥ 4.9.4, 当前建议为4.9.5。
<!-- in your <dependencies> block -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.9.4</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-acl</artifactId>
<version>4.9.4</version>
</dependency>

步骤2:生产消息

创建消息生产者

// 实例化消息生产者Producer
DefaultMQProducer producer = new DefaultMQProducer(
groupName,
new AclClientRPCHook(new SessionCredentials(accessKey, secretKey)) // ACL权限
);
// 设置NameServer的地址
producer.setNamesrvAddr(nameserver);
// 启动Producer实例
producer.start();
说明:
以下参数需登录 TDMQ RocketMQ 版控制台 获取。
参数
说明
groupName
生产者组名称,建议使用对应的 topic 名字
accessKey
角色密钥,在控制台的集群权限页面 AccessKey 列复制。

secretKey
角色名称,在控制台的集群权限页面 SecretKey 列复制。
nameserver
集群接入地址,控制台集群基本信息页面的接入信息模块获取。


发送消息

和普通的消息没有区别,广播消息主要表达的是消费方的行为。
int totalMessagesToSend = 5;
for (int i = 0; i < totalMessagesToSend; i++) {
Message message = new Message(TOPIC_NAME, ("Hello scheduled message " + i).getBytes());
// 发送消息
SendResult sendResult = producer.send(message);
System.out.println("sendResult = " + sendResult);
}

步骤3:消费消息

创建消费者

TDMQ RocketMQ 版支持 push 和 pull 两种消费模式。推荐Push消费模式。
// 实例化消费者
DefaultMQPushConsumer pushConsumer = new DefaultMQPushConsumer(
groupName,
new AclClientRPCHook(new SessionCredentials(accessKey, secretKey))); //ACL权限
// 设置NameServer的地址
pushConsumer.setNamesrvAddr(nameserver);
说明:
以下参数需登录 TDMQ RocketMQ 版控制台 获取。
参数
说明
groupName
Group 的名称,在控制台 Group 管理页面复制。
4.x虚拟集群/专享集群:此处需拼接命名空间名称,格式为namespace全称%group名称,例如 MQ_INSTxxx_aaa%GroupTest。
4.x通用集群此处无需拼接,填写 Group 名称即可。

nameserver
集群接入地址,控制台集群基本信息页面的接入信息模块获取。

secretKey
角色名称,在控制台的集群权限页面 SecretKey 列复制。
accessKey
角色密钥,在控制台的集群权限页面 AccessKey 列复制。


订阅消息

主要增加消费模式的设置。
//设置广播消费模式
pushConsumer.setMessageModel(MessageModel.BROADCASTING);
// 订阅topic
pushConsumer.subscribe(topic_name, "*");
// 注册回调实现类来处理从broker拉取回来的消息
pushConsumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
// 消息处理逻辑
System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);
// 标记该消息已经被成功消费, 根据消费情况,返回处理状态
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});
// 启动消费者实例
pushConsumer.start();
参数
说明
topic_name
Topic 的名称,在控制台 Topic 管理页面复制。
4.x虚拟集群/专享集群:此处需拼接命名空间名称,格式为namespace全称%topic名称,例如 MQ_INSTxxx_aaa%TopicTest。
4.x通用集群:此处无需拼接,填写 Topic 名称即可。

"*"
订阅表达式如果为 null 或*表达式表示订阅全部,同时支持 "tag1 || tag2 || tag3" 标识订阅多个类型的 tag。

步骤4. 查看消息详情

发送完成消息后会得到一个消息 ID (messageID),您可以在控制台的消息查询 > 综合查询页面查询刚刚发送的消息,以及该消息的详情和轨迹等信息。

说明:
上述是对消息的发布和订阅方式的简单介绍。更多操作可参见 GitHub DemoRocketMQ 官方文档