# 项目变更日志 - 第二阶段:MQTT 集成 ## 2023-12-02: 第二阶段启动 - MQTT 集成 - **状态**: 第一阶段开发已完成,相关日志已存档至 `LogBook_Phase1.md`。 - **当前任务**: 开始第二阶段开发,重点是 MQTT 的集成。 - **依据文档**: `springboot-init-main/doc/development_stages/stage_2_mqtt_integration.md`。 - **已完成**: 1. **数据库初始化**: 在 `mqtt_power` 数据库中成功创建了 `robot_task` 表。 2. **MQTT Broker 确定与配置**: - 确认使用公共 MQTT Broker: `broker.emqx.io:1883`。 - 更新 `springboot-init-main/src/main/resources/application.yml` 添加了 Broker 连接信息,并为 `client-id-prefix`、`command-topic-base`、`status-topic-base` 添加了项目唯一前缀 (如 `yupi_mqtt_power_project/`) 以确保在公共环境中的唯一性。 - 创建了 `springboot-init-main/src/main/java/com/yupi/project/config/properties/MqttProperties.java` 来映射 MQTT 配置。 3. **更新开发文档**: - 修改了 `springboot-init-main/doc/development_stages/stage_2_mqtt_integration.md`,反映了公共 Broker 的使用、Topic 唯一性策略以及应用层鉴权的重要性。 4. **实现 MQTT 客户端核心配置 (`MqttConfig.java` 和 `MqttCallbackHandler.java`)**: - 创建了 `com.yupi.project.mqtt.MqttCallbackHandler` 类,实现 `MqttCallbackExtended`接口,用于处理连接事件和初步的消息接收(日志记录)。在 `connectComplete` 中实现订阅状态主题 `yupi_mqtt_power_project/robot/status/+` 的逻辑。 - 创建了 `com.yupi.project.config.MqttConfig` 配置类: - 注入 `MqttProperties` 和 `MqttCallbackHandler`。 - 定义了 `MqttConnectOptions` Bean,配置连接参数(如自动重连、Clean Session、超时等)。 - 定义了 `MqttClient` Bean,使用唯一的客户端ID,并设置 `MqttCallbackHandler`。 - 使用 `@PostConstruct` 实现了应用启动时自动连接到 MQTT Broker 的逻辑。 - 使用 `@PreDestroy` 实现了应用关闭时断开 MQTT 连接的逻辑。 - **下一步计划 (依据 `stage_2_mqtt_integration.md`)**: 1. **实现 `RobotTask` 管理 (`RobotTaskService`)**: - 创建 `RobotTask` 实体、Mapper 接口。 - 定义并实现 `RobotTaskService` 接口中的方法 (如创建任务、更新任务状态、查找任务等)。 2. **实现消息发布 (`MqttService`)**: 用于向机器人发送指令,并与 `RobotTaskService` 交互记录任务。 3. **实现消息处理 (`MqttMessageHandler`)**: 详细处理从机器人接收到的状态更新,并与 `RobotTaskService` 交互更新任务状态。 4. **实现任务超时处理 (`TaskTimeoutHandler`)**: 定时检查并处理超时的 MQTT 任务。