Dict.CN 在线词典, 英语学习, 在线翻译 ------------- MyGitee My腾云code

Happy_EveryDay

可以平凡 不可以平庸 无爱则无忧,无欲则无求,无怒而无敌,无怨才是佛。所有烦恼,都是放不下的执著 开源技群 328035181 MyGitee

MqttTest 20260401

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





posted on 2026-04-01 10:01  cn2025  阅读(0)  评论(0)    收藏  举报

导航