代码已开源在GitHub,如果有帮助欢迎star。
Architecture
Mqtt-server-arch.jpg
Server side 构成
broker (mqtt核心:用于消息的发送管理) 类似 pub-sub 队列
Application Server用于处理RestFul的请求,转发为Mqtt消息
Publisher 本质是Mqtt client,用于发布server端消息到broker
Subscriber 本质是Mqtt client,用于从broker订阅client端消息
Client side
Publisher用于发布client端消息到broker
Subscriber用于从broker订阅server端的消息
Client 用于发送RestFul 请求给Application Server触发消息pub/sub
总结:从结构上Broker算是Mqtt的本质上的Server端,从业务上讲封装了Mqtt Client pub/sub的Application server和Broker共同构成了业务上的Server端
安装mosquitto及基本使用
安装
# Install Mosquitto Broker
sudo apt-get update
sudo apt-get install mosquitto
# Install the Clients
sudo apt-get install mosquitto-clients
开启、停止查看状态
# 查看状态
sudo service mosquitto status
# 使用默认配置打开mosquitto, 使用-v打开log功能
sudo mosquitto -c /etc/mosquitto/mosquitto.conf -v
# 停止
sudo service mosquitto stop
#开启
sudo service mosquitto start
使用mosquitto测试pub/sub
注意 pub和sub的clientid不能相同,相同会刷屏。
# 简单测试发布。 -h host -t topic -m message
mosquitto_pub -h localhost -t mqtt-test -m 'hello mqtt'
# 简单测试订阅。
mosquitto_sub -h localhost -t mqtt-test
# 发布设置用户密码 -u user -P password
mosquitto_pub -u admin -P admin -h localhost -t mqtt/loop/message -m 'test mqtt'
mosquitto_sub -u admin -P admin -h localhost -t mqtt/loop/message
# 指定发布clientid -i (id to use for this client)
mosquitto_sub -u admin -P admin -i shuai-ubuntu-test -h localhost -t mqtt/loop/message
mosquitto_pub -u admin -P admin -i shuai-ubuntu-test-client -h localhost -t mqtt/loop/message -m 'test mqtt client'
查看broker的log
mosquitto的默认log 地址是:/var/log/mosquitto/xxx.log
tailf /var/log/mosquitto/mosquitto.log
构建Java-Mqtt-Server(Springboot + Mqtt)
requirement依赖
mosquitto broker
可以使用Eclipse公开的broker,据说底层也是mosquitto。地址为iot.eclipse.org
可以部署安装mosquitto(本文方案)
springboot (2.1.5.RELEASE)
Eclipse Paho
curl/postman
构建springboot项目
1. 使用idea springboot initializer 初始化springboot工程
使用springboot版本2.1.5.RELEASE
2. pom中添加
org.springframework.boot
spring-boot-starter-integration
org.springframework.integration
spring-integration-stream
org.springframework.integration
spring-integration-mqtt
org.projectlombok
lombok
1.16.10
provided
3. MQTT Configuration
配置broker地址,
端口号,
是否使用ssl,
用户名
密码
public abstract class MQTTConfig {
protected final String broker = "10.156.2.132";
protected final int qos = 2;
protected Boolean hasSSL = false; /* By default SSL is disabled */
protected Integer port = 1883; /* Default port */
protected final String userName = "admin";
protected final String password = "admin";
protected final String TCP = "tcp://";
protected final String SSL = "ssl://";
/**
* Custom Configuration
*
* @param broker
* @param port
* @param ssl
* @param withUserNamePass
*/
protected abstract void config(String broker, Integer port, Boolean ssl, Boolean withUserNamePass);
/**
* Default Configuration
*/
protected abstract void config();
}
4. Publisher推送