evo-BMS/README_MQTT_OPTIONAL.md
2025-11-09 19:21:01 +08:00

182 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 系统更加健壮和灵活!