|
@@ -0,0 +1,109 @@
|
|
|
+package com.huimv.env.manage.saas.mqtt.publish;
|
|
|
+
|
|
|
+import cn.hutool.extra.spring.SpringUtil;
|
|
|
+import org.eclipse.paho.client.mqttv3.MqttClient;
|
|
|
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
|
|
|
+import org.eclipse.paho.client.mqttv3.MqttMessage;
|
|
|
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.context.annotation.Configuration;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.sql.*;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+@Configuration
|
|
|
+@Component
|
|
|
+public class PublishMQTT {
|
|
|
+
|
|
|
+// public static final String HOST = "tcp://192.168.1.68:1883";
|
|
|
+// private static final String clientid = "publish";
|
|
|
+// private MqttClient client;
|
|
|
+// private MqttConnectOptions options;
|
|
|
+//
|
|
|
+// private String userName = "admin"; //非必须
|
|
|
+// private String passWord = "admin"; //非必须
|
|
|
+
|
|
|
+ public void start(String HOST,String clientid,String userName,String passWord,String topic,String message) {
|
|
|
+ MqttClient client;
|
|
|
+ MqttConnectOptions options;
|
|
|
+
|
|
|
+ try {
|
|
|
+ // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
|
|
|
+ client = new MqttClient(HOST, clientid, new MemoryPersistence());
|
|
|
+ // MQTT的连接设置
|
|
|
+ options = new MqttConnectOptions();
|
|
|
+ // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接
|
|
|
+ options.setCleanSession(true);
|
|
|
+ // 设置连接的用户名
|
|
|
+ options.setUserName(userName);
|
|
|
+ // 设置连接的密码
|
|
|
+ options.setPassword(passWord.toCharArray());
|
|
|
+ // 设置超时时间 单位为秒
|
|
|
+ options.setConnectionTimeout(10);
|
|
|
+ // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
|
|
|
+ options.setKeepAliveInterval(20);
|
|
|
+ //设置断开后重新连接
|
|
|
+ options.setAutomaticReconnect(true);
|
|
|
+
|
|
|
+ client.connect(options);
|
|
|
+
|
|
|
+// pubMessage(client,"list",topic);
|
|
|
+ MqttMessage mess = new MqttMessage();
|
|
|
+ mess.setQos(1);
|
|
|
+ mess.setRetained(true);
|
|
|
+ mess.setPayload(message.getBytes());
|
|
|
+ try {
|
|
|
+ client.publish(topic, mess);
|
|
|
+ } catch (Exception e) {
|
|
|
+ //LOGGER.error(e.getLocalizedMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 消息发送
|
|
|
+ * @param message
|
|
|
+ * @param topic
|
|
|
+ */
|
|
|
+ public void pubMessage(MqttClient client,String message,String topic){
|
|
|
+ MqttMessage mess = new MqttMessage();
|
|
|
+ mess.setQos(1);
|
|
|
+ mess.setRetained(true);
|
|
|
+ mess.setPayload(message.getBytes());
|
|
|
+ try {
|
|
|
+ client.publish(topic, mess);
|
|
|
+ } catch (Exception e) {
|
|
|
+ //LOGGER.error(e.getLocalizedMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * 连接数据库
|
|
|
+ * */
|
|
|
+ public String Connect(String chipId) throws SQLException, ClassNotFoundException {
|
|
|
+
|
|
|
+
|
|
|
+ //1.加载驱动
|
|
|
+ Class.forName("com.mysql.cj.jdbc.Driver");
|
|
|
+ //2.链接数据库
|
|
|
+ String url = "jdbc:mysql://122.112.224.199:3306/huimv-env-platform-qingshan";
|
|
|
+ Connection conn = DriverManager.getConnection(url, "qingshan", "qingshan@2022");
|
|
|
+ System.out.println("开始连接"+conn);
|
|
|
+ //3.获取statement对象
|
|
|
+ Statement statement = conn.createStatement();
|
|
|
+ String sql = "select chip_id from env_device_register where chip_id=".concat(chipId);
|
|
|
+ //4.获取结果集
|
|
|
+ ResultSet resultSet = statement.executeQuery(sql);
|
|
|
+ resultSet.next();//这个一定不能少,指针取值
|
|
|
+ String deviceCode = resultSet.getString("chip_id");
|
|
|
+ System.out.println(deviceCode);
|
|
|
+
|
|
|
+ return deviceCode;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|