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

4.6 KiB
Raw Permalink Blame History

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 禁用时

  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 注解:

@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服务未启用");
    }
}

使用建议

开发阶段

  1. 初期开发:设置 mqtt.enabled: false,专注于核心业务功能开发
  2. 功能测试:可以使用内存数据库或模拟数据进行测试
  3. 集成测试:准备好 MQTT 服务器后,设置 mqtt.enabled: true 进行完整测试

生产环境

  1. 部署前:确保 MQTT 服务器已准备就绪
  2. 配置检查:验证 MQTT 连接参数正确
  3. 启用功能:设置 mqtt.enabled: true
  4. 监控日志:观察 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:阿里云物联网平台

故障排除

常见问题

  1. 项目启动失败

    • 检查 mqtt.enabled 是否设置为 false
    • 确认没有其他 MQTT 相关的强制依赖
  2. MQTT 功能不工作

    • 检查 mqtt.enabled 是否设置为 true
    • 验证 MQTT 服务器连接参数
    • 查看应用日志中的 MQTT 连接信息
  3. 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

总结

通过这种可选配置方式,您可以:

  1. 灵活开发:在没有 MQTT 服务器时也能正常开发和测试
  2. 渐进集成:先完成核心功能,再集成 MQTT 功能
  3. 环境适配:不同环境可以有不同的 MQTT 配置
  4. 故障隔离MQTT 服务器问题不会影响整个应用的启动

这样的设计让您的 EvoBMS 系统更加健壮和灵活!