MQTTnet 套件更新到 4 點多版本以後網路上許多程式範例都失效了,本篇示範的是最簡單的連接、接收、發送訊息示範
在 MQTT 中要斷開連接建立發送一個結束訊息,通知自己要離開了,這個訊息常被稱為遺囑(Testament),這裡我們回復為「正常中斷連線」
需要在連接前綁定接收訊息和連接成功事件才能正常接收到
參考資料:
GitHub - dotnet/MQTTnet
安裝
先使用 NuGet 安裝 MQTTnet 套件,或是使用 .NET CLI 執行以下指令安裝
dotnet add package MQTTnet
最簡單示範
在 HiveMQ 這個網站中有提供公開的 MQTT Broker(代理),我們可以連接到這個 Broker 測試發送和接收訊息。
using System.Text;
using MQTTnet;
using MQTTnet.Client;
var mqttFactory = new MqttFactory();
using var mqttClient = mqttFactory.CreateMqttClient();
var mqttClientOptions = new MqttClientOptionsBuilder()
.WithClientId("Client1")
.WithTcpServer("broker.hivemq.com", 1883)
.Build();
// 接收訊息事件
mqttClient.ApplicationMessageReceivedAsync += async e =>
{
Console.WriteLine("接收到訊息:");
Console.WriteLine($"+ 主題 = {e.ApplicationMessage.Topic}");
Console.WriteLine($"+ 有效載荷 = {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
Console.WriteLine($"+ QoS = {e.ApplicationMessage.QualityOfServiceLevel}");
Console.WriteLine($"+ 保留 = {e.ApplicationMessage.Retain}");
Console.WriteLine();
};
// 連接成功事件
mqttClient.ConnectedAsync += async e =>
{
Console.WriteLine("已連接到 MQTT");
// 訂閱主題
await mqttClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("test/topic").Build());
};
// 連接
await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None);
// 發送訊息
await mqttClient.PublishAsync(new MqttApplicationMessageBuilder()
.WithTopic("test/topic")
.WithPayload("Hello World")
.WithRetainFlag()
.Build());
Console.ReadLine();
// 發送遺囑並斷開連接
await mqttClient.DisconnectAsync(
new MqttClientDisconnectOptionsBuilder()
.WithReason(MqttClientDisconnectOptionsReason.NormalDisconnection)
.Build()
);
在 MQTT 中要斷開連接建立發送一個結束訊息,通知自己要離開了,這個訊息常被稱為遺囑(Testament),這裡我們回復為「正常中斷連線」
需要在連接前綁定接收訊息和連接成功事件才能正常接收到
參考資料:
GitHub - dotnet/MQTTnet
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com