物联网实战:Spring Boot MQTT | MQTT 设备模拟器演示
IoT 设备模拟器 - 支持 MQTT、TCP、UDP、CoAP、HTTP 多种协议
源码(mqtt-simulator-boot)
https://gitee.com/kcnf-iot/mqtt-simulator
Eclipse Paho
Eclipse Paho 是一个可靠、成熟、覆盖语言极广的 MQTT 通信“标准库”
- 多语言支持
Paho MQTT客户端库被设计为支持多种编程语言,支持的语言主要包括Java、C、Python和JavaScript等
Paho库根据每种语言的特点提供了相应语言的API
Paho官网
https://github.com/eclipse-paho
https://eclipse.dev/paho/
集成paho框架
<!-- MQTT Client -->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.mqttv5.client</artifactId>
<version>1.2.5</version>
</dependency>
paho不同语言sdk

模拟客户端目录

定义模拟客户端接口
package com.jysemel.iot.simulator;
import com.jysemel.iot.simulator.model.DeviceConfig;
import java.util.List;
public interface SimulatorFactory {
String getProtocol();
boolean isDeviceRunning(DeviceConfig config);
void start(DeviceConfig config);
void stop(DeviceConfig config);
void publishMessage(String topic, String payload, String payloadFormat, int qos, DeviceConfig deviceConfig);
void subscribeTopic(String topic, int qos, DeviceConfig deviceConfig);
void unsubscribeTopic(String topic, DeviceConfig deviceConfig);
List<String> getSubscriptions(DeviceConfig deviceConfig);
}
包装不同协议
package com.jysemel.iot.simulator.protocol;
import java.util.List;
import java.util.function.BiConsumer;
/**
* 协议客户端接口
* 统一管理不同协议的通信
* @author jysemel
*/
public interface ProtocolClient {
/**
* 获取协议名称
*/
String getProtocol();
/**
* 连接到服务器
*/
void connect() throws Exception;
/**
* 断开连接
*/
void disconnect() throws Exception;
/**
* 关闭客户端
*/
void close() throws Exception;
/**
* 检查是否已连接
*/
boolean isConnected();
/**
* 发布消息
* @param topic 主题/路径(不同协议意义不同)
* @param payload 消息内容
* @param payloadFormat 消息内容格式(字符串、json、xml、二进制)
* @param qos 服务质量(仅MQTT有效,其他协议可忽略)
*/
void publish(String topic, String payload,String payloadFormat, int qos) throws Exception;
/**
* 订阅主题
* @param topic 主题/路径
* @param qos 服务质量
*/
void subscribe(String topic, int qos) throws Exception;
/**
* 取消订阅
*/
void unsubscribe(String topic) throws Exception;
/**
* 获取订阅列表
*/
List<String> getSubscriptions();
/**
* 设置消息回调
*/
void setMessageCallback(BiConsumer<String, String> callback);
/**
* 获取客户端ID
*/
String getClientId();
/**
* 获取服务器URL
*/
String getServerUrl();
}
启动演示


- 添加不同设备和协议

