|
@@ -0,0 +1,93 @@
|
|
|
+package com.huimv.publish;
|
|
|
+
|
|
|
+import com.huimv.entity.Device;
|
|
|
+import com.huimv.entity.People;
|
|
|
+import com.huimv.service.IDeviceService;
|
|
|
+import com.huimv.service.IPeopleService;
|
|
|
+import com.huimv.service.impl.DeviceServiceImpl;
|
|
|
+import com.huimv.untils.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 java.util.List;
|
|
|
+
|
|
|
+@Configuration
|
|
|
+public class PublishMQTT {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPeopleService peopleService;
|
|
|
+ @Autowired
|
|
|
+ private IDeviceService deviceService;
|
|
|
+
|
|
|
+ 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() {
|
|
|
+ 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.setCallback(new PushCallback());
|
|
|
+// MqttTopic topic = client.getTopic(TOPIC1);
|
|
|
+ //遗嘱
|
|
|
+ // options.setWill(topic, "关闭前最后的信息".getBytes(), 1, true);
|
|
|
+ client.connect(options);
|
|
|
+
|
|
|
+ DeviceServiceImpl deviceService = SpringUtil.getBean(DeviceServiceImpl.class);
|
|
|
+ List<Device> list = deviceService.list();
|
|
|
+ System.out.println(list);
|
|
|
+ pubMessage("list","huimv_down_867699060002756");
|
|
|
+ //向client2发送消息
|
|
|
+// pubMessage("张三,20,男","test");
|
|
|
+// client.unsubscribe("/test/01");
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 消息发送
|
|
|
+ * @param message
|
|
|
+ * @param topic
|
|
|
+ */
|
|
|
+ public void pubMessage(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 static void main(String[] args) {
|
|
|
+ PublishMQTT client1 = new PublishMQTT();
|
|
|
+ client1.start();
|
|
|
+ }
|
|
|
+}
|