🧠我让 TRAE 帮我在 Spring Boot 项目集成 EMQX,8 年 Java 老兵都觉得离谱地轻松!

106 阅读3分钟

🧠我让 TRAE 帮我在 Spring Boot 项目集成 EMQX,8 年 Java 老兵都觉得离谱地轻松!


🧔 作者:天天摸鱼的java工程师
☕ 标签:Spring Boot、EMQX、MQTT、TRAE、消息中间件、物联网
🚀 项目关键词:MQTT 协议、设备上下线、消息推送、AI 编程助手


💭 前言:老兵也怕集成 MQTT?

作为一名 Java 后端开发 8 年的老兵,说实话,看到“MQTT”这三个字母的时候,我还是有点怕的。

不是不能做,是太!麻!烦!

  • 协议不熟
  • EMQX 文档一堆
  • Java MQTT 客户端各种版本冲突
  • Spring Boot 配置又臭又长
  • 最后还不一定连得上!

于是我做了个决定:

我让 TRAE 来帮我集成 EMQX。

说实话,没报太大希望,结果……

它直接给我把 Spring Boot MQTT 全家桶都搭好了。


🧰 技术选型 & 项目目标

项目目标:

  • 在 Spring Boot 项目中接入 MQTT 协议,连接 EMQX
  • 实现基本的 MQTT 发布/订阅功能
  • 支持设备上下线监听
  • 使用 Spring Bean 管理客户端连接
  • 能跑,能发,能收,能扩展

技术选型:

模块技术栈
MQTT BrokerEMQX(本地部署)
客户端协议MQTT 3.1.1
框架Spring Boot 2.7.x
AI 助手TRAE SOLO(全程陪跑)

🧱 项目结构

mqtt-demo/
├── MqttConfig.java              # MQTT 配置类
├── MqttGateway.java            # Spring 集成接口
├── MqttSender.java             # 发布消息工具类
├── MqttReceiver.java           # 订阅回调处理器
├── Application.java            # 启动类
└── application.yml             # 配置文件

🧠 TRAE 是怎么帮我搞定的?

我只说了一句话:

“帮我在 Spring Boot 项目中接入 EMQX,实现 MQTT 的消息发布和订阅。”

它立刻开始:

  1. 选择了最稳定的 MQTT Java 客户端(Eclipse Paho)
  2. 自动配置 mqtt 连接参数
  3. 注入 Spring Bean,配置连接工厂
  4. 自动添加订阅回调类
  5. 写好了消息发布工具类
  6. 提醒我:EMQX 默认监听端口是 1883,要记得开防火墙 🧱

✅ 项目核心代码展示

1️⃣ 配置文件 application.yml

mqtt:
  host: tcp://localhost:1883
  client-id: springboot-client
  username: emqx_user
  password: emqx_pass
  default-topic: test/topic

2️⃣ MQTT 配置类 MqttConfig.java

@Configuration
public class MqttConfig {

    @Value("${mqtt.host}")
    private String host;

    @Value("${mqtt.client-id}")
    private String clientId;

    @Value("${mqtt.username}")
    private String username;

    @Value("${mqtt.password}")
    private String password;

    @Bean
    public MqttClient mqttClient() throws MqttException {
        MqttConnectOptions options = new MqttConnectOptions();
        options.setUserName(username);
        options.setPassword(password.toCharArray());
        options.setCleanSession(true);

        MqttClient client = new MqttClient(host, clientId, new MemoryPersistence());
        client.connect(options);
        return client;
    }
}

3️⃣ 发布消息工具类 MqttSender.java

@Component
public class MqttSender {

    @Autowired
    private MqttClient mqttClient;

    @Value("${mqtt.default-topic}")
    private String defaultTopic;

    public void send(String topic, String payload) throws MqttException {
        MqttMessage message = new MqttMessage(payload.getBytes(StandardCharsets.UTF_8));
        message.setQos(1);
        mqttClient.publish(topic, message);
    }

    public void send(String payload) throws MqttException {
        send(defaultTopic, payload);
    }
}

4️⃣ 消息订阅监听器 MqttReceiver.java

@Component
public class MqttReceiver {

    @Autowired
    public MqttReceiver(MqttClient mqttClient) throws MqttException {
        mqttClient.subscribe("test/topic", (topic, message) -> {
            String payload = new String(message.getPayload());
            System.out.println("收到消息:Topic=" + topic + ", 内容=" + payload);
        });
    }
}

🧪 本地 EMQX 启动方式(Docker)

docker run -d --name emqx -p 1883:1883 -p 18083:18083 emqx/emqx:latest
  • MQTT 端口:1883
  • 管理后台:http://localhost:18083
  • 默认账号:admin / public

🔁 测试流程

  1. 启动 EMQX(Docker)
  2. 启动 Spring Boot 项目
  3. 调用接口发布消息(或直接调用 mqttSender.send(...)
  4. 控制台输出收到的消息

😎 8 年 Java 老兵的感受

说实话,这种集成以前我自己搞要:

  • 看文档 2 小时
  • 配依赖踩版本坑 1 小时
  • 调 MQTT 协议抓包半天
  • 最后还有可能连不上

现在:

我只说一句话,TA(TRAE)全都安排好了。

而且代码结构规整、注释清晰、符合 Spring 编码习惯,不输人类高级 Java 架构师。


💡 延伸玩法(TRAE 还能继续帮我)

  • ✅ 自动重连机制
  • ✅ 多 Topic 动态订阅
  • ✅ 消息持久化(入库)
  • ✅ REST 接口驱动消息发送
  • ✅ 设备上下线监听(EMQX 支持)
  • ✅ Spring Cloud Stream 集成 MQTT Binder
  • ✅ WebSocket/MQTT 混合网关方案

🧠 总结:AI 是我最靠谱的“架构拍档”

TRAE 不只是一个代码生成器,它:

  • 懂 Spring Boot 的项目结构
  • 懂 MQTT 的协议细节和 EMQX 的接入方式
  • 能自动识别你的配置问题、版本冲突
  • 还能根据你的后续需求自动改进架构

作为一个写了 8 年代码的人,我真心觉得:

“AI 不会取代我,但它让我效率翻倍。”


🔚 最后

🚀 如果你也在用 Spring Boot 想接入 EMQX,
👨‍💻 如果你也在研究物联网/消息系统,
🧑‍🔧 如果你也想轻轻松松搞定 MQTT,

那么不妨也试试 TRAE SOLO。