C# MQTT 客戶端 最簡單示範

MQTTnet 套件更新到 4 點多版本以後網路上許多程式範例都失效了,本篇示範的是最簡單的連接、接收、發送訊息示範

安裝

先使用 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

留言