PublishMQTT.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package com.huimv.publish;
  2. import com.huimv.entity.Device;
  3. import com.huimv.entity.People;
  4. import com.huimv.service.IDeviceService;
  5. import com.huimv.service.IPeopleService;
  6. import com.huimv.service.impl.DeviceServiceImpl;
  7. import com.huimv.untils.SpringUtil;
  8. import org.eclipse.paho.client.mqttv3.MqttClient;
  9. import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
  10. import org.eclipse.paho.client.mqttv3.MqttMessage;
  11. import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.context.annotation.Configuration;
  14. import java.util.List;
  15. @Configuration
  16. public class PublishMQTT {
  17. @Autowired
  18. private IPeopleService peopleService;
  19. @Autowired
  20. private IDeviceService deviceService;
  21. public static final String HOST = "tcp://192.168.1.68:1883";
  22. private static final String clientid = "publish";
  23. private MqttClient client;
  24. private MqttConnectOptions options;
  25. private String userName = "admin"; //非必须
  26. private String passWord = "admin"; //非必须
  27. public void start() {
  28. try {
  29. // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
  30. client = new MqttClient(HOST, clientid, new MemoryPersistence());
  31. // MQTT的连接设置
  32. options = new MqttConnectOptions();
  33. // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接
  34. options.setCleanSession(true);
  35. // 设置连接的用户名
  36. options.setUserName(userName);
  37. // 设置连接的密码
  38. options.setPassword(passWord.toCharArray());
  39. // 设置超时时间 单位为秒
  40. options.setConnectionTimeout(10);
  41. // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
  42. options.setKeepAliveInterval(20);
  43. //设置断开后重新连接
  44. options.setAutomaticReconnect(true);
  45. // 设置回调
  46. //client.setCallback(new PushCallback());
  47. // MqttTopic topic = client.getTopic(TOPIC1);
  48. //遗嘱
  49. // options.setWill(topic, "关闭前最后的信息".getBytes(), 1, true);
  50. client.connect(options);
  51. DeviceServiceImpl deviceService = SpringUtil.getBean(DeviceServiceImpl.class);
  52. List<Device> list = deviceService.list();
  53. System.out.println(list);
  54. pubMessage("list","huimv_down_867699060002756");
  55. //向client2发送消息
  56. // pubMessage("张三,20,男","test");
  57. // client.unsubscribe("/test/01");
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. /**
  63. * 消息发送
  64. * @param message
  65. * @param topic
  66. */
  67. public void pubMessage(String message,String topic){
  68. MqttMessage mess = new MqttMessage();
  69. mess.setQos(1);
  70. mess.setRetained(true);
  71. mess.setPayload(message.getBytes());
  72. try {
  73. client.publish(topic, mess);
  74. } catch (Exception e) {
  75. //LOGGER.error(e.getLocalizedMessage());
  76. }
  77. }
  78. public static void main(String[] args) {
  79. PublishMQTT client1 = new PublishMQTT();
  80. client1.start();
  81. }
  82. }