本项目基于 Paho MQTT C++ 库封装了两种 MQTT 客户端:异步客户端(MqttASyncClient)和同步客户端(MqttSyncClient)。
一、异步客户端 (MqttASyncClient)
1.1 核心特性
- 基于
mqtt::async_client 实现
- 支持从 JSON 文件动态加载订阅/发布主题
- 支持自定义回调处理消息
- 支持遗愿消息(Last Will)
- 非阻塞式消息发布
1.2 使用示例
#include "ams/mqtt_async_client.h"
#include "ams/localmqttcallback.h"
// 1. 创建客户端实例
MqttASyncClient client;
// 2. 初始化连接参数
std::string iot_host = "tcp://10.10.10.104:1883";
std::string iot_cert = "/path/to/cert.pem";
std::string iot_user = "allspark@robot";
std::string iot_pwd = "your_password";
std::string will_topic = "allspark/robot/clientId/will";
std::string will_msg = "offline";
std::string car_id = "robot001";
client.initParams(iot_host, iot_cert, iot_user, iot_pwd,
will_topic, will_msg, car_id,
0, 20, 3, true);
// 3. 从 JSON 文件加载主题配置
std::string topic_file = "/path/to/ams_topic.json";
client.initTopics(topic_file);
// 4. 设置回调函数
LocalMQTTCallback callback;
callback.setMessageCallback([](mqtt::const_message_ptr msg) {
std::cout << "收到消息: " << msg->get_topic()
<< " -> " << msg->to_string() << std::endl;
});
callback.setConnectionLostCallback([](const std::string& cause) {
std::cout << "连接丢失: " << cause << std::endl;
});
callback.setConnectedCallback([]() {
std::cout << "连接成功" << std::endl;
});
client.Set