| package com.dy.pipIrrApp.workOrder.mqtt; | 
|   | 
| 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; | 
|   | 
| /** | 
|  * @author ZhuBaoMin | 
|  * @date 2024-11-16 11:27 | 
|  * @LastEditTime 2024-11-16 11:27 | 
|  * @Description MQTT客户端连接池,对外提供一个初始化的MQTT客户端 | 
|  */ | 
|   | 
| @Slf4j | 
| public class MqttClientConnectorPool { | 
|     public static MqttClient mqttClient; | 
|   | 
|     /** | 
|      * 连接MQTT客户端 | 
|      * @return 获取MQTT连队对象 | 
|      */ | 
|     public static MqttClient connectMQTT(String broker, String username, String password) { | 
|         if (mqttClient != null){ | 
|             log.info("已存在!"); | 
|             return mqttClient; | 
|         } | 
|   | 
|         try { | 
|             String clientId = System.currentTimeMillis() + ""; | 
|   | 
|             //创建MQTT客户端(指定broker、客户端id、消息持久策略) | 
|             mqttClient = new MqttClient(broker, clientId, new MemoryPersistence()); | 
|   | 
|             //创建连接参数配置 | 
|             MqttConnectOptions options = new MqttConnectOptions(); | 
|             options.setUserName(username); | 
|             options.setPassword(password.toCharArray()); | 
|             //是否清除会话 | 
|             options.setCleanSession(true); | 
|             //连接超时时间 | 
|             options.setKeepAliveInterval(20); | 
|             //是否自动重连 | 
|             options.setAutomaticReconnect(true); | 
|             mqttClient.connect(options); | 
|             log.info("MqttClient 服务启动broker初始化!"); | 
|         } catch (MqttException e){ | 
|             log.error("MqttClient connect Error:{}", e.getMessage()); | 
|             e.printStackTrace(); | 
|         } | 
|         return mqttClient; | 
|     } | 
|   | 
|     /** | 
|      * 关闭MQTT客户端 | 
|      * @param client client | 
|      */ | 
|     public static void closeClient(MqttClient client){ | 
|         try { | 
|             // 断开连接 | 
|             client.disconnect(); | 
|             // 关闭客户端 | 
|             client.close(); | 
|         } catch (MqttException e){ | 
|             log.error("MqttClient disconnect or close Error:{}", e.getMessage()); | 
|             e.printStackTrace(); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 关闭MQTT客户端 | 
|      */ | 
|     public static void closeStaticClient(){ | 
|         try { | 
|             if (mqttClient != null){ | 
|                 // 断开连接 | 
|                 mqttClient.disconnect(); | 
|                 // 关闭客户端 | 
|                 mqttClient.close(); | 
|             } | 
|         } catch (MqttException e){ | 
|             log.error("MqttClient disconnect or close Error:{}", e.getMessage()); | 
|             e.printStackTrace(); | 
|         } | 
|     } | 
| } |