# MQTT 可选配置说明 ## 概述 为了让项目在没有 MQTT 服务器的情况下也能正常启动,我们对 MQTT 功能进行了可选配置。现在您可以通过配置文件控制是否启用 MQTT 功能。 ## 配置方式 ### 1. 禁用 MQTT(默认) 在 `application.yml` 中设置: ```yaml mqtt: enabled: false # 禁用MQTT功能 host: tcp://localhost:1883 # ... 其他配置 ``` 当 `mqtt.enabled` 设置为 `false` 时: - MQTT 配置类不会被加载 - MQTT 服务不会启动 - 项目可以正常启动,不会因为连接不到 MQTT 服务器而失败 ### 2. 启用 MQTT 当您准备好 MQTT 服务器后,可以启用 MQTT 功能: ```yaml mqtt: enabled: true # 启用MQTT功能 host: tcp://your-mqtt-server:1883 clientId: evobms-client username: your-username password: your-password # ... 其他配置 ``` ## 功能影响 ### MQTT 禁用时 1. **正常功能**: - 所有基础的 BMS 设备管理功能正常工作 - 数据库操作正常 - Web API 正常响应 - MyBatis-Plus 功能正常 2. **受限功能**: - 无法发送 MQTT 消息 - 无法接收设备实时数据 - 以下 API 会返回友好的错误信息: - `POST /bms/device/queryStatus/{deviceCode}` - 查询设备状态 - `POST /bms/device/restart/{deviceCode}` - 重启设备 - `POST /bms/device/config/{deviceCode}` - 配置设备 - `POST /bms/device/mqtt/send` - 发送 MQTT 消息 ### MQTT 启用时 所有功能正常工作,包括: - 实时设备数据接收 - 设备远程控制 - MQTT 消息发送和接收 - 设备状态查询 ## 技术实现 ### 1. 条件配置 使用 Spring Boot 的 `@ConditionalOnProperty` 注解: ```java @Configuration @ConditionalOnProperty(name = "mqtt.enabled", havingValue = "true") public class MqttConfig { // MQTT配置只有在mqtt.enabled=true时才会加载 } @Service @ConditionalOnProperty(name = "mqtt.enabled", havingValue = "true") public class MqttService { // MQTT服务只有在mqtt.enabled=true时才会加载 } ``` ### 2. 可选依赖注入 在 Controller 中使用可选的依赖注入: ```java @Autowired(required = false) private MqttService mqttService; public AjaxResult someMethod() { if (mqttService != null) { // MQTT功能可用 mqttService.doSomething(); return success("操作成功"); } else { // MQTT功能不可用 return error("MQTT服务未启用"); } } ``` ## 使用建议 ### 开发阶段 1. **初期开发**:设置 `mqtt.enabled: false`,专注于核心业务功能开发 2. **功能测试**:可以使用内存数据库或模拟数据进行测试 3. **集成测试**:准备好 MQTT 服务器后,设置 `mqtt.enabled: true` 进行完整测试 ### 生产环境 1. **部署前**:确保 MQTT 服务器已准备就绪 2. **配置检查**:验证 MQTT 连接参数正确 3. **启用功能**:设置 `mqtt.enabled: true` 4. **监控日志**:观察 MQTT 连接状态和消息处理情况 ## MQTT 服务器推荐 ### 1. 开发测试 - **Eclipse Mosquitto**:轻量级,易于安装 ```bash # Docker 方式启动 docker run -it -p 1883:1883 eclipse-mosquitto ``` - **EMQX**:功能丰富,有 Web 管理界面 ```bash # Docker 方式启动 docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx ``` ### 2. 生产环境 - **EMQX Enterprise**:企业级功能,高可用 - **AWS IoT Core**:云服务,免运维 - **Azure IoT Hub**:微软云服务 - **阿里云 IoT Platform**:阿里云物联网平台 ## 故障排除 ### 常见问题 1. **项目启动失败** - 检查 `mqtt.enabled` 是否设置为 `false` - 确认没有其他 MQTT 相关的强制依赖 2. **MQTT 功能不工作** - 检查 `mqtt.enabled` 是否设置为 `true` - 验证 MQTT 服务器连接参数 - 查看应用日志中的 MQTT 连接信息 3. **API 返回错误** - 确认是否需要 MQTT 功能 - 检查错误信息,判断是配置问题还是服务器问题 ### 日志配置 在 `application.yml` 中添加 MQTT 相关日志: ```yaml logging: level: com.evobms.framework.config.MqttConfig: debug com.evobms.project.bms.service.MqttService: debug org.springframework.integration.mqtt: debug ``` ## 总结 通过这种可选配置方式,您可以: 1. **灵活开发**:在没有 MQTT 服务器时也能正常开发和测试 2. **渐进集成**:先完成核心功能,再集成 MQTT 功能 3. **环境适配**:不同环境可以有不同的 MQTT 配置 4. **故障隔离**:MQTT 服务器问题不会影响整个应用的启动 这样的设计让您的 EvoBMS 系统更加健壮和灵活!