1.首先在一台准备好的Linux服务器安装EMQX,作为MQTT服务器
1.wget https://www.emqx.com/zh/downloads/broker/5.0.21/emqx-5.0.21-el8-amd64.tar.gz
2.mkdir -p emqx && tar -zxvf emqx-5.0.21-el8-amd64.tar.gz -C emqx
3.启动 EMQX
./emqx/bin/emqx start
放行端口:
18083(mqtt后台端口 )
8083(mqtt的websocket连接端口 )
1883(mqtt的TCP连接端口 )
2.访问EMQX客户端:服务器IP:18083,如果出现如下页面,说明安装成功
初始账号:admin
初始密码:public
登录进去会提示修改密码,将密码改成自己的即可
springboot项目引入MQTT
一、引入依赖
<!--MQTT协议依赖-->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.integration/spring-integration-mqtt -->
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
<version>5.4.3</version>
</dependency>
二、新建类:MyMqttServer.java(初始化mqtt,发布和订阅主题的类)
package com.system.mqttMessage;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import java.util.*;
/**
* @author wangghua
* @ClassName MyMqttClient
* @描述:
* @datetime 2023年 4月 28日 14:34
*/
@Async
public class MyMqttServer {
private static final Logger logger = LoggerFactory.getLogger(MyMqttServer.class);
public static MqttClient mqttClient = null;
private static MemoryPersistence memoryPersistence = null;
private static MqttConnectOptions mqttConnectOptions = null;
private static String clientId = "serviceId:20230428123456789";
private static String mqttuser = "admin";
private static String password = "你修改的密码";
private static String Host = "tcp://服务器IP:1883";
/**
* 保存topic,断开重连,重新订阅
*/
private static Set<String> topicSet = new HashSet<>();
/**
* 初始化客户端,连接mqtt服务器
*/
public static void init() {
memoryPersistence = new MemoryPersistence();
try {
mqttClient = new MqttClient(Host, clientId, memoryPersistence);
} catch (MqttException e) {
e.printStackTrace();
}
mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setCleanSession(false);
mqttConnectOptions.setConnectionTimeout(30);
mqttConnectOptions.setKeepAliveInterval(45);
//设置自动重连
mqttConnectOptions.setAutomaticReconnect(true)