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