# mqtt-simulator **Repository Path**: yangl8564/mqtt-simulator ## Basic Information - **Project Name**: mqtt-simulator - **Description**: MQTT 设备模拟器 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2026-06-02 - **Last Updated**: 2026-06-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 第一阶段:入门准备与第一个程序 学习目标:搭建开发环境,理解 MQTT 基础概念,能够连接到公共 Broker 并完成最简单的消息发布/订阅。 主要内容: MQTT 协议核心概念:Broker、客户端、主题、消息、QoS 等级(简要)。 在项目中引入 Paho Java 客户端依赖(Maven/Gradle/JAR)。 使用 MqttClient(同步 API)连接到公共 Broker(如 tcp://broker.emqx.io:1883)。 编写第一个程序:发布一条“Hello MQTT”消息。 编写第一个订阅程序:订阅主题并打印收到的消息。 学习 MqttClient.generateClientId() 生成唯一客户端 ID。 产出示例:一个控制台程序,能够连接、发布、订阅、断开。 第二阶段:同步 API 核心功能 学习目标:掌握同步 API 下的所有核心操作,理解连接选项和消息属性,能够处理常见异常。 主要内容: MqttConnectOptions 详解: 设置心跳间隔 (setKeepAliveInterval)。 设置连接超时 (setConnectionTimeout)。 清理会话标志 (setCleanSession)。 用户名/密码认证 (setUserName, setPassword)。 消息发布: 设置 QoS(0/1/2)和保留标志 (setRetained)。 发布到指定主题。 批量发布。 订阅主题: 单主题订阅。 多主题订阅(使用通配符 + 和 #)。 每个订阅指定不同的 QoS。 实现 MqttCallback 接口处理: connectionLost(连接丢失时的重连逻辑)。 messageArrived(接收消息)。 deliveryComplete(确认发布完成)。 异常处理:捕获 MqttException 并分析错误码。 产出示例:一个温湿度传感器模拟程序,周期性发布数据;另一个订阅程序实时显示数据并处理断线重连。 第三阶段:异步 API 与高性能场景 学习目标:理解同步与异步 API 的区别,掌握 MqttAsyncClient 的使用,能够编写非阻塞的 MQTT 应用。 主要内容: 异步 API 核心类:MqttAsyncClient、IMqttActionListener、IMqttToken。 异步连接、发布、订阅的方法调用方式。 使用 IMqttActionListener 回调处理操作成功或失败。 使用 IMqttToken 等待完成(waitForCompletion)或注册回调。 异步消息接收仍通过 MqttCallback(与同步 API 相同)。 性能对比:在大量并发请求下异步 API 的优势。 注意事项:线程安全、回调中避免长时间阻塞。 产出示例:一个网关程序,异步接收多个设备的上行消息并转发到另一个 Broker,展示高吞吐处理能力。 第四阶段:可靠性、重连与持久会话 学习目标:构建生产级稳定的 MQTT 客户端,掌握自动重连、持久会话、消息存储等关键机制。 主要内容: 持久会话: setCleanSession(false) 的作用。 Broker 端持久订阅与离线消息。 客户端断线重连后恢复状态。 自动重连: setAutomaticReconnect(true)。 理解内置重连策略(退避算法)。 自定义重连逻辑(在 connectionLost 中手动重连)。 消息持久化存储: MqttDefaultFilePersistence 使用。 内存存储 (MemoryPersistence) 与文件存储的差异。 确保 QoS 1/2 消息不丢失。 遗嘱消息(Last Will): 在连接时设置遗嘱消息主题和内容。 应用场景:监控客户端异常离线。 产出示例:一个具备自动重连、持久会话、离线消息接收能力的设备客户端,模拟网络闪断后自动恢复订阅和未确认消息。 第五阶段:安全、高可用与 MQTT 5.0 特性 学习目标:掌握 TLS/SSL 安全连接、多 Broker 高可用配置,以及 MQTT 5.0 的新特性。 主要内容: TLS/SSL 安全连接: 创建 SSLContext 加载 JKS 或 PEM 证书。 设置 SSLSocketFactory 到 MqttConnectOptions。 使用 ssl:// 开头的 Broker 地址。 高可用与故障转移: setServerURIs(String[]) 配置多个 Broker 地址。 连接失败时的自动切换机制。 MQTT 5.0 新特性(需指定协议版本): 原因码(Reason Code)和原因字符串。 用户属性(User Properties)– 自定义元数据。 会话过期间隔(Session Expiry Interval)。 主题别名(Topic Alias)减少开销。 请求/响应模式(Request/Response)。 性能调优: 调整发送/接收缓冲区大小。 合理设置 QoS 与网络带宽匹配。 批量发布与异步刷新的组合。 产出示例:一个支持 TLS 加密、连接三个 Broker 地址实现高可用的客户端,并利用 MQTT 5.0 用户属性传递消息追踪 ID。