砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
    • app
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
    • app
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 首页
    • 开发板介绍
    • micropython环境搭建
    • esp32开发板
    • 面包板
    • 万能表使用
  • 面包板
    • 点灯
  • esp32
    • 点亮开发板led灯
    • 点亮外接led
    • 点亮外接oled文字
    • 红外传感器
    • 红外传感器+olde
    • esp32+面包板
  • MQTT编程

    • MQTT入门

      • 物联网 MQTT
      • 物联网 MQTT和Socket
      • 物联网 MQTT订阅性能优势
      • 物联网 MQTT简易版Broker
    • HiveMQ

      • hivemq实战入门
    • Protobuf

      • Protobuf入门
      • Protobuf入门+梳理
      • Protobuf实战第一篇
    • emqx

      • emqx入门
    • mica

      • mica入门
    • netty

      • 入门

        • 基于netty构建入门
        • 理解粘包/拆包
        • 编解码器机制与自定义协议
        • 心跳和ack机制
        • mqtt服务demo演示
        • mqtt服务协议支持
        • mqtt服务udp支持
      • 协议规范

        • mqtt协议规范(发布/订阅模式)
        • mqtt协议规范(轻量级二进制协议)
        • mqtt协议规范(三种 QoS 等级)
        • mqtt协议规范(主题通配符订阅)
        • mqtt协议规范(遗嘱与保留消息)
      • 报文结构

        • 控制报文结构(报文分类)
        • 控制报文结构(连接与握手)
        • 控制报文结构(发布与接收)
      • 核心实战

        • 核心实战(握手与认证)
        • 核心实战(心跳保活机制)
        • 核心实战(会话管理)
        • 核心实战(安全)
    • netty-mqtt-simulator

      • 物联网终端模拟器

        • 设备模拟器设计
        • 设备模拟器教程
    • netty-mqtt-boot

      • 物联网实战

        • 模块化设计
        • 统一接入层
        • 消息路由与流转层
        • 核心服务层
        • 业务应用层
        • 整体项目管理
        • 测试脚手架
        • 兼容支持
  • 物联网实战:Spring Boot + Netty 搭建 MQTT | MQTT 设备模拟器
    • 项目简介
      • 定位
      • 核心功能
      • 技术栈
      • 模块结构
      • 快速开始
    • 1. 项目简介
      • 1.1 这是什么?
      • 1.2 为什么需要模拟器?
      • 1.3 技术栈
    • 2. 快速开始
      • 2.1 环境要求
      • 2.2 启动步骤
        • 步骤1:准备MQTT服务器
        • 步骤2:编译项目
        • 步骤3:启动应用
        • 步骤4:访问Web界面
    • 3. 核心概念
      • 3.1 MQTT 是什么?
      • 3.2 核心术语
      • 3.3 QoS 等级详解
      • 3.4 主题设计
    • 4. 代码结构
      • 4.1 数据流向
    • 6. API 接口
      • 🌐 Swagger UI(推荐⭐)
      • 6.1 设备管理 API
      • 6.2 消息测试 API
      • 6.3 场景配置 API
      • 6.4 健康检查 API ⭐新增
      • 6.5 WebSocket 主题

物联网实战:Spring Boot + Netty 搭建 MQTT | MQTT 设备模拟器

IoT 设备模拟器 - 支持 MQTT、TCP、UDP、CoAP、HTTP 多种协议

imgimgimg

项目简介

定位

mqtt-simulator 是一个用于模拟 IoT 设备的测试工具,帮助开发者:

  • 模拟多种协议(MQTT、TCP、UDP、CoAP、HTTP)的设备终端
  • 通过 REST API 动态管理设备生命周期
  • 进行功能测试、压力测试和协议兼容性验证
  • 作为 sample-00 项目的客户端配套测试使用

核心功能

功能说明
多协议支持MQTT (v3.1.1/v5.0)、TCP、UDP、CoAP、HTTP/WebSocket
设备管理动态创建设备、启动、停止、批量操作
消息发送支持文本、二进制(Base64)、JSON 格式
主题订阅订阅/取消订阅、接收服务器下推命令
消息日志记录发送/接收消息历史,支持查询和清理
健康检查设备状态监控、连接状态检测
API 文档集成 Swagger UI,可视化 API 操作

技术栈

Spring Boot 3.5 + Java 21
├── MQTT Client: Eclipse Paho MQTT v5
├── Protocol: TCP / UDP / CoAP / HTTP
├── Database: SQLite (本地存储)
├── API Doc: SpringDoc OpenAPI (Swagger UI)
└── Build: Maven

模块结构

com.jysemel.iot.simulator
├── protocol/          # 协议实现
│   ├── mqtt/         # MQTT/MQTTS 协议
│   ├── tcp/          # TCP 自定义协议
│   ├── udp/          # UDP 协议
│   ├── coap/         # CoAP 协议
│   └── http/         # HTTP/WebSocket 协议
├── controller/       # REST API 控制器
│   ├── device/       # 设备管理
│   ├── message/     # 消息测试
│   ├── sub/         # 订阅管理
│   ├── log/         # 日志查询
│   └── health/      # 健康检查
├── model/            # 数据模型
├── doa/              # 数据访问层
└── config/           # 配置类

快速开始

# 1. 启动项目
cd mqtt-simulator
mvn spring-boot:run

# 2. 访问 Swagger UI
http://localhost:8082/swagger-ui.html

# 3. 常用 API
# 创建设备: POST /api/device/add
# 启动设备: POST /api/device/start
# 发布消息: POST /api/message/publish
# 订阅主题: POST /api/sub/subscribe

1. 项目简介

1.1 这是什么?

这是一个模拟 IoT 设备的软件,可以:

  • ✅ 模拟温度传感器、智能灯、开关等设备
  • ✅ 通过 MQTT 协议发送/接收消息
  • ✅ 提供 Web 界面实时监控
  • ✅ 一键启动多个设备进行压力测试

1.2 为什么需要模拟器?

场景说明
🧪 开发测试没有真实硬件时,用软件模拟设备测试服务器
🎓 学习MQTT直观理解 MQTT 的工作原理
📊 压力测试模拟100个设备同时在线,测试服务器性能
🐛 调试问题复现特定场景,排查bug

1.3 技术栈

后端:Spring Boot 3.x + Java 21
MQTT客户端:Eclipse Paho MQTT v5
实时通信:WebSocket (STOMP协议)
JSON处理:Fastjson2
简化代码:Lombok
API文档:SpringDoc OpenAPI (Swagger UI) ⭐新增

2. 快速开始

2.1 环境要求

# 检查Java版本(需要21或以上)
java -version

# 检查Maven(需要3.6+)
mvn -version

2.2 启动步骤

步骤1:准备MQTT服务器

你需要一个MQTT Broker(服务器),推荐选择:

选项A:使用公共测试服务器(最简单)

地址:tcp://broker.emqx.io:1883
无需安装,直接连接

选项B:本地安装EMQX(推荐学习用)

# macOS
brew install emqx

# Windows(下载安装包)
# https://www.emqx.io/zh/downloads

# 启动EMQX
emqx start

# 访问管理界面
# http://localhost:18083
# 默认账号:admin/public

选项C:Docker运行

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest

步骤2:编译项目

cd mqtt-simulator
mvn clean package -DskipTests

步骤3:启动应用

java -jar target/mqtt-simulator-1.0-SNAPSHOT.jar

看到以下输出表示成功:

╔══════════════════════════════════════════════════╗
║     MQTT Device Simulator Web v1.0              ║
║     IoT设备模拟测试平台                          ║
║                                                  ║
║     访问地址: http://localhost:8080             ║
╚══════════════════════════════════════════════════╝

步骤4:访问Web界面

打开浏览器访问:http://localhost:8080


3. 核心概念

3.1 MQTT 是什么?

MQTT = Message Queuing Telemetry Transport(消息队列遥测传输)

💡 类比理解:MQTT就像"邮局系统"

  • 设备 = 寄信人/收信人
  • Broker(服务器) = 邮局
  • Topic(主题) = 收件地址
  • Message(消息) = 信件内容

3.2 核心术语

术语英文说明类比
BrokerBrokerMQTT服务器,转发消息邮局
ClientClient连接服务器的设备寄信人
TopicTopic消息分类标签收件地址
PublishPublish发送消息到主题寄信
SubscribeSubscribe监听某个主题的消息订阅报纸
QoSQuality of Service消息送达保证级别快递类型

3.3 QoS 等级详解

QoS 0 - At most once(最多一次)
├─ 特点:发完不管,可能丢失
├─ 速度:最快
└─ 适用:传感器数据(丢几条没关系)

QoS 1 - At least once(至少一次)⭐ 推荐
├─ 特点:保证送达,可能重复
├─ 速度:中等
└─ 适用:大多数场景

QoS 2 - Exactly once(恰好一次)
├─ 特点:保证送达且不重复
├─ 速度:最慢
└─ 适用:金融交易等关键业务

3.4 主题设计

本项目使用的主题规范:

devices/{产品Key}/{设备Key}/{消息类型}

示例:
devices/smart_light/light_001/telemetry    # 遥测数据上报
devices/smart_light/light_001/commands     # 接收命令
devices/smart_light/light_001/status       # 状态变化

通配符支持:

+/+ 单层通配符:
  devices/+/light_001/telemetry  → 匹配所有产品的light_001设备

# 多层通配符:
  devices/#  → 匹配devices下的所有消息

4. 代码结构

4.1 数据流向

【设备上报数据流程】

DeviceSimulator (定时任务)
    ↓ 生成遥测数据
MqttClientWrapper (发布消息)
    ↓ MQTT协议
MQTT Broker (转发消息)
    ↓ 
IoT平台 (接收并处理)

【服务器下发命令流程】

用户 (Web界面点击"开灯")
    ↓ HTTP请求
Controller (接收请求)
    ↓
Service (找到对应设备)
    ↓
MqttClientWrapper (发布命令到主题)
    ↓ MQTT协议
DeviceSimulator (收到消息)
    ↓ 执行回调
WebSocket (推送结果到前端)
    ↓
用户 (看到"开灯成功")

6. API 接口

🌐 Swagger UI(推荐⭐)

访问地址: http://localhost:8082/swagger-ui.html

优势:

  • ✅ 可视化界面,无需安装任何工具
  • ✅ 自动同步代码变更
  • ✅ 一键测试API(Try it out)
  • ✅ 查看请求/响应示例
  • ✅ 支持参数自动补全

6.1 设备管理 API

方法路径说明
POST/api/device-management/start创建设备
POST/api/device-management/{key}/stop停止设备
GET/api/device-management/list获取列表
GET/api/device-management/statistics获取统计

6.2 消息测试 API

方法路径说明
POST/api/message-test/publish发布消息
POST/api/message-test/subscribe订阅主题

6.3 场景配置 API

方法路径说明
POST/api/scenario-config/demo演示场景(3个设备)
POST/api/scenario-config/batch?count=10批量场景
POST/api/scenario-config/stress?count=50压力测试
POST/api/scenario-config/business/{type}业务场景

6.4 健康检查 API ⭐新增

方法路径说明
GET/api/health/mqtt?brokerUrl=xxx检查MQTT服务器连接
GET/api/health/app获取应用健康状态
GET/api/health/full?brokerUrl=xxx综合健康检查
GET/api/health/alive快速存活检查

使用示例:

# 1. 检查MQTT服务器是否启动
curl "http://localhost:8082/api/health/mqtt?brokerUrl=tcp://localhost:1883"

# 响应(成功):
{
  "serverUrl": "tcp://localhost:1883",
  "status": "UP",
  "healthy": true,
  "message": "MQTT服务器连接成功",
  "responseTimeMs": 15
}

# 响应(失败):
{
  "serverUrl": "tcp://localhost:1883",
  "status": "DOWN",
  "healthy": false,
  "message": "MQTT服务器连接失败: Connection refused",
  "responseTimeMs": 5023
}

# 2. 查看应用状态
curl http://localhost:8082/api/health/app

# 3. 综合健康检查
curl "http://localhost:8082/api/health/full?brokerUrl=tcp://localhost:1883"

应用场景:

  • 🔍 启动前检查:确认MQTT服务器是否正常
  • 📊 系统监控:定时检测服务器状态
  • 🐛 故障排查:快速定位问题根源
  • 🤖 自动化运维:集成到监控脚本中

6.5 WebSocket 主题

主题方向说明
/topic/devices服务器→前端设备列表更新
/topic/messages服务器→前端消息收发通知
/topic/statistics服务器→前端统计数据更新

最近更新: 2026/5/29 16:30
Contributors: kcnf
Next
设备模拟器教程