From 4f3a98f19143865cdc1de4791e8a95d96bd40c65 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期五, 01 八月 2025 13:27:59 +0800
Subject: [PATCH] yys 密码已重置

---
 cnas-device/src/main/java/com/ruoyi/device/mqtt/MQClient.java |   97 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 97 insertions(+), 0 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQClient.java b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQClient.java
new file mode 100644
index 0000000..1c3c548
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQClient.java
@@ -0,0 +1,97 @@
+package com.ruoyi.device.mqtt;
+
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class MQClient {
+
+	private static MqttClient client;
+	public static MqttClient getClient() {
+		return client;
+	}
+	public static void setClient(MqttClient client) {
+		MQClient.client = client;
+	}
+
+	/**
+	 * WEB鏈嶅姟鍣ㄨ繛鎺QTT鏈嶅姟鍣ㄧ殑閰嶇疆
+	 * @param userName 璐﹀彿
+	 * @param password 瀵嗙爜
+	 * @param outTime 瓒呮椂鏃堕棿
+	 * @param KeepAlive 蹇冭烦妫�娴嬫椂闂�
+	 * @return
+	 */
+	private MqttConnectOptions getOption(String userName, String password, int outTime, int KeepAlive) {
+		MqttConnectOptions option = new MqttConnectOptions();
+		// 璁剧疆鏄惁娓呯┖session,false琛ㄧず鏈嶅姟鍣ㄤ細淇濈暀瀹㈡埛绔殑杩炴帴璁板綍锛宼rue琛ㄧず姣忔杩炴帴鍒版湇鍔″櫒閮戒互鏂扮殑韬唤杩炴帴
+		option.setCleanSession(true);
+		// 璁剧疆杩炴帴鐨勭敤鎴峰悕
+		option.setUserName(userName);
+		// 璁剧疆杩炴帴鐨勫瘑鐮�
+		option.setPassword(password.toCharArray());
+		// 璁剧疆瓒呮椂鏃堕棿 鍗曚綅涓虹
+		option.setConnectionTimeout(outTime);
+		// 璁剧疆浼氳瘽蹇冭烦鏃堕棿 鍗曚綅涓虹 鏈嶅姟鍣ㄤ細姣忛殧(1.5*keepTime)绉掔殑鏃堕棿鍚戝鎴风鍙戦�佷釜娑堟伅鍒ゆ柇瀹㈡埛绔槸鍚﹀湪绾匡紝浣嗚繖涓柟娉曞苟娌℃湁閲嶈繛鐨勬満鍒�
+		option.setKeepAliveInterval(KeepAlive);
+		// setWill鏂规硶锛屽鏋滈」鐩腑闇�瑕佺煡閬撳鎴风鏄惁鎺夌嚎鍙互璋冪敤璇ユ柟娉曘�傝缃渶缁堢鍙g殑閫氱煡娑堟伅
+		// option.setWill(topic, "close".getBytes(), 2, true);
+		//璁剧疆鏈�澶ч�熷害
+		option.setMaxInflight(1000);
+		log.info("================>>>MQTT杩炴帴璁よ瘉鎴愬姛<<======================");
+		return option;
+	}
+
+	/**
+	 * WEB鏈嶅姟鍣ㄨ繛鎺QTT鏈嶅姟鍣ㄥ嚱鏁�
+	 * @param mqttConfig yml涓璏QTT鐨勯厤缃�
+	 */
+	public void connect(MQConfig mqttConfig) throws MqttException {
+		client = new MqttClient(mqttConfig.getUrl(), mqttConfig.getClientId(), new MemoryPersistence());
+		MqttConnectOptions options = getOption(mqttConfig.getUsername(), mqttConfig.getPassword(),
+				mqttConfig.getTimeout(), mqttConfig.getKeepAlive());
+		MQClient.setClient(client);
+		//杩炴帴澶辫触璋冪敤鍥炶皟鍑芥暟锛岄噸鏂拌繛鎺�
+		client.setCallback(new MQCallback<Object>(this, mqttConfig));
+		if (!client.isConnected()) {
+			client.connect(options);
+			// 璁㈤槄涓婚
+			MQSubscribe.subscribe_0(mqttConfig.getSubscribe());
+			log.info("================>>>MQTT杩炴帴鎴愬姛<<======================");
+		} else {// 杩欓噷鐨勯�昏緫鏄鏋滆繛鎺ヤ笉鎴愬姛灏遍噸鏂拌繛鎺�
+			client.disconnect();
+			client.connect(options);
+		}
+	}
+
+	/**
+	 * WEB鏈嶅姟鍣ㄤ笌MQTT鏈嶅姟鍣ㄧ殑鏂嚎閲嶈繛
+	 * @throws Exception
+	 */
+	public Boolean reConnect() throws Exception {
+		Boolean isConnected = false;
+		if (null != client) {
+			client.connect();
+			if (client.isConnected()) {
+				isConnected = true;
+			}
+		}
+		return isConnected;
+	}
+
+	/**
+	 * 寮傚父鍏抽棴鏈嶅姟锛學EB鏈嶅姟鍣ㄤ笌MQTT鏈嶅姟鍣ㄧ殑鏂紑杩炴帴鍑芥暟
+	 */
+	@SneakyThrows
+	public void close(){
+		client.close();
+		client.disconnect();
+		log.info("================>>寮傚父鍏抽棴涓巑qtt鏈嶅姟鍣ㄧ殑杩炴帴<<======================");
+	}
+}

--
Gitblit v1.9.3