🧠我让 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 Broker | EMQX(本地部署) |
| 客户端协议 | 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 的消息发布和订阅。”
它立刻开始:
- 选择了最稳定的 MQTT Java 客户端(Eclipse Paho)
- 自动配置 mqtt 连接参数
- 注入 Spring Bean,配置连接工厂
- 自动添加订阅回调类
- 写好了消息发布工具类
- 提醒我: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
🔁 测试流程
- 启动 EMQX(Docker)
- 启动 Spring Boot 项目
- 调用接口发布消息(或直接调用
mqttSender.send(...)) - 控制台输出收到的消息
😎 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。