物联网实战:Spring Boot MQTT | MQTT 设备模拟器演示(附源码)

物联网实战: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();
}

启动演示

  • 添加不同设备和协议
相关推荐
小兔崽子去哪了8 小时前
Docker 删除镜像后磁盘空间没有释放?
后端·docker·容器
凤凰院凶涛QAQ9 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
高明珠9 小时前
麒麟 V10 SP1 排查实录:ttyS5 每 10 秒莫名收到一批报文,元凶是 eGTouchD
后端
卷无止境9 小时前
Python FFI 技术深度解析:ctypes、cffi 与 pybind11 的性能差异与实践挑战
后端·python
ServBay9 小时前
AI Gateway 是什么?为什么每个平台都在做
后端·aigc·ai编程
SamDeepThinking9 小时前
Vibe Coding最重要的是Spec
后端·程序员·ai编程
掘金_答案10 小时前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
妙码生花10 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(三十三):权限规则管理器
后端·go·gin
猿与禅10 小时前
CosId 分布式 ID 生成器完全教程:从架构原理到生产落地
java·shardingsphere·雪花算法·分布式id·高性能·cosid·号段模式
MindUp10 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维