惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
博客园 - 三生石上(FineUI控件)
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
腾讯CDC
酷 壳 – CoolShell
酷 壳 – CoolShell
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Jina AI
Jina AI
爱范儿
爱范儿
博客园 - 【当耐特】
雷峰网
雷峰网
S
SegmentFault 最新的问题
美团技术团队
Blog — PlanetScale
Blog — PlanetScale
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
J
Java Code Geeks

博客园 - cn2025

K8s -sentinel-dashboard【nacos版本】集 20260815 kubeSphere【ks-controller-manager-webhook-cert】证书 20260814 K8s -nacos集 20260813 K8s - 安装部署redis集群-哨兵sentinels集(支持从K8s外部访问)20260812 k8s-deployment发布测试(pv-pvc-deployment-service) 20260810 K8s - 安装部署Kafka、Zookeeper集群教程(支持从K8s外部访问)20260808 k8s-关机及启动脚本工具 【kubeSphere发布ruoyi-pro前端】工具脚本20260731 【k8s】 etcd服务端及客户端版本及快照【定时】备份 20260730 harbor【https启用】及k8节点部证书20260728 kube-flannel.yml k8s集群-安装helm 【kubeShpere】 官网 20260710 kubesphere-KDP 工具脚本【kubeSphere发布ruoyi-pro前端】20260720 HbuilderX 内置终端转为 gitBash 20260720 kubeSphere发布ruoyi-pro后端-用到脚本 kubeSphere发布ruoyi-web前端 20260711 kubeSphere发布ruoyi-pro后端 k8s集群-kubeShpere 20260710 安装Helm 20260710 k8s-portainer docker 镜像查询 k8集群一键重置 docker run OceanBase spring ai alibaba doc AI2.0 【多模态】 20260615 世界只有一个墨脱 AI2.0 【Mcp-client】 20260611 AI2.0 【Mcp-server】 20260611 GoLand 配Go SDK
MqttTest 20260401
cn2025 · 2026-04-01 · via 博客园 - cn2025

1、docker   emqx-47 服务端

image

2、MqttTest实例

2.1   pom

<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>3.0.2</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>

2.1   MqttTest

package com.sb.mqtt;

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

public class MqttTest {

public static void main(String[] args) {
// 1. 基础配置
String subTopic = "testtopic/#"; // 订阅主题(通配符,匹配 testtopic/1、testtopic/2 等)
String pubTopic = "testtopic/1"; // 发布主题
String content = "Hello World 2026"; // 消息内容
int qos = 2; // 服务质量:0最多一次,1至少一次,2 exactly once
String broker = "tcp://192.168.91.165:9610";// MQTT Broker 地址
String clientId = "admin_" + System.currentTimeMillis(); // 客户端ID(必须全局唯一) admin_ emqx_test_
MemoryPersistence persistence = new MemoryPersistence(); // 内存持久化(生产环境可改用文件持久化)

try {
// 2. 创建 MQTT 客户端实例
MqttClient client = new MqttClient(broker, clientId, persistence);

// 3. 配置连接选项
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setUserName("admin"); // 用户名 emqx_test admin
connOpts.setPassword("public".toCharArray()); // 密码 emqx_test_password public
connOpts.setCleanSession(true); // 清除会话:true=不保留离线消息,false=保留
connOpts.setConnectionTimeout(10); // 连接超时时间(秒)
connOpts.setKeepAliveInterval(60); // 心跳间隔(秒)

// 4. 设置回调函数(核心:处理连接丢失、消息接收、消息送达)
client.setCallback(new MqttCallback() {
/**
* 连接丢失时触发(如网络断开、Broker 宕机)
*/
@Override
public void connectionLost(Throwable cause) {
System.out.println("连接断开,可做重连:" + cause.getMessage());
// 生产环境:在此处实现自动重连逻辑
}

/**
* 订阅主题收到消息时触发
*/
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println("=====================================");
System.out.println("接收消息主题: " + topic);
System.out.println("接收消息Qos: " + message.getQos());
System.out.println("接收消息内容: " + new String(message.getPayload()));
System.out.println("=====================================");
}

/**
* 消息发布完成时触发(仅 QoS 1/2 有效)
*/
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
System.out.println("deliveryComplete---------" + token.isComplete());
}
});

// 5. 建立连接
System.out.println("Connecting to broker: " + broker);
client.connect(connOpts);
System.out.println("Connected");

// 6. 订阅主题
System.out.println("Subscribing to topic: " + subTopic);
client.subscribe(subTopic, qos);
System.out.println("Subscribed");

// 7. 发布消息
System.out.println("Publishing message: " + content);
MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(qos);
message.setRetained(false); // 保留消息:false=不持久化,true=Broker 存储,新订阅者立即收到
client.publish(pubTopic, message);
System.out.println("Message published");

// 8. 等待消息接收(测试用,生产环境不要主动断开)
Thread.sleep(2000);

// 9. 断开连接、关闭资源
client.disconnect();
System.out.println("Disconnected");
client.close();
System.exit(0);

} catch (MqttException me) {
// 异常处理
System.out.println("reason " + me.getReasonCode());
System.out.println("msg " + me.getMessage());
System.out.println("loc " + me.getLocalizedMessage());
System.out.println("cause " + me.getCause());
System.out.println("excep " + me);
me.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

2.2   MqttTest  输出

Connecting to broker: tcp://192.168.91.165:9610
Connected
Subscribing to topic: testtopic/#
Subscribed
Publishing message: Hello World 2026
Message published
deliveryComplete---------true
=====================================
接收消息主题: testtopic/1
接收消息Qos: 2
接收消息内容: Hello World 2026
=====================================
Disconnected