前言:
在写这篇文章之前,我其实是碰到这个需求的,因为当时我需要这个MQTT服务器功能集成到我的程序中,而不是去用第三方公共的,但是我查阅了大量文章却都没有太大的收获,可能是我搜索的关键字不对,现在自己弄懂了大概之后就顺便做个记录。有错误的地方欢迎大家指出!
这里就只讲解与之相关的内容了,相关概念可以去看MQTT协议入门、websocket详情
关于mqtt的代码我是参考的mqtt参考
如何搭建MQTT本地服务器:
1. 要在pom.xml中添加相关maven第三方依赖至于Moquette是什么大家可以自行去查阅
<!-- Moquette是 MQTT Broker实例库-->
<dependency>
<groupId>io.moquette</groupId>
<artifactId>moquette-broker</artifactId>
<version>0.12.1</version>
<!-- 这里是因为我的其他配置信息里面好像跟这个冲突了,所以没要它-->
<exclusions>
<exclusion>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
</exclusion>
</exclusions>
</dependency>
2. 添加mqtt的第三方依赖
<!--添加mqtt依赖-->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.5</version>
</dependency>
3. mqtt服务器及其客户端相关配置信息代码
import io.moquette.broker.Server;
import io.moquette.broker.config.MemoryConfig;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class MqttAndBrokerConfig {
// Mqtt服务器
@Bean
public Server MqttBrokerServer() throws Exception{
// MQTT broker 服务器
Server mqttBroker = new Server();
Properties configProps = new Properties();
configProps.setProperty("port","1883");
configProps.setProperty("host","127.0.0.1");
configProps.setProperty("websocket_port","8087");//设置 WebSocket端口,用于支持 WebSocket连接
try {
// 启动服务器
mqttBroker.startServer(new MemoryConfig(configProps));
System.out.println("Moquette MQTT Broker started. Press Ctrl+C to shutdown.");
// 程序关闭时执行的操作
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
System.out.println("Stopping Moquette MQTT Broker...");
mqttBroker.stopServer();
System.out.println("Moquette MQTT Broker Stopped.");
}));
}catch (Exception e){
// 捕获并输出异常信息。
e.p