使用C#連接MQTT 進行數據接收和數據處理,QoS1 持久會話模式 解決服務掉選數據丟失問題
1、準備工作
在開始寫代碼之前,我們先要準備下寫程序的
基礎信息:MQTT地址、OrgID(機構ID)、API訪問密鑰
連接模式:QoS1, 持久會話 ,防止服務掉選數據丟失問題,具體模式根據實際情況而定
2、我們先創建個C#的控制臺應用程序,然后寫入以下代碼:
// 創建MQTT客戶端工廠
var mqttFactory = new MqttFactory();
var mqttClient = mqttFactory.CreateMqttClient();
// 配置MQTT客戶端選項
var options = new MqttClientOptionsBuilder()
.WithClientId("org-機構id-quickstart") // 修改客戶端ID
.WithTcpServer("服務器地址", 1883) // 修改服務器地址,使用默認端口
.WithCredentials("org-機構id", "秘鑰") // 修改用戶名
.WithCleanSession(false) // 添加這行,不清除會話
.Build(); // 移除 TLS 配置,因為使用的是普通連接
try
{
// 添加連接狀態處理
mqttClient.UseDisconnectedHandler(async e =>
{
Console.WriteLine("已斷開連接!正在嘗試重新連接...");
await Task.Delay(TimeSpan.FromSeconds(5));
try
{
await mqttClient.ConnectAsync(options);
}
catch
{
Console.WriteLine("重新連接失敗");
}
});
// 修改訂閱主題以匹配您的格式
string topic = "/device_sensor_data/機構id/+/+/+/+";
// 添加訂閱處理
mqttClient.UseApplicationMessageReceivedHandler(e =>
{
string payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
string topic = e.ApplicationMessage.Topic ?? "";
// 解析主題數據
string[] topicParts = topic.Split('/');
//將解析后的出具進行處理
});
// 修改訂閱配置
var subscribeOptions = new MqttClientSubscribeOptionsBuilder()
.WithTopicFilter(topic, MqttQualityOfServiceLevel.AtLeastOnce)
.Build();
// 連接后進行訂閱
await mqttClient.ConnectAsync(options);
await mqttClient.SubscribeAsync(subscribeOptions);
Console.WriteLine("已成功連接并訂閱主題 (QoS1, 持久會話)");
// 保持程序運行
Console.WriteLine("按任意鍵退出...");
Console.ReadKey();
// 斷開連接
await mqttClient.DisconnectAsync();
}
catch (Exception ex)
{
Console.WriteLine($"發生錯誤: {ex.Message}");
}
4、以下是程序接收到數據后的截圖


浙公網安備 33010602011771號