一、MQTT簡介 MQTT(Message Queuing Telemetry Transport)是一種輕量級的消息傳輸協議,主要用於物聯網設備間的通信。MQTT協議採用客戶端/伺服器架構,支持發佈/訂閱模式和點對點模式,具有高效、可靠、靈活等優點。 MQTT協議主要由三個要素構成:發佈者(pub ...
一、MQTT簡介
MQTT(Message Queuing Telemetry Transport)是一種輕量級的消息傳輸協議,主要用於物聯網設備間的通信。MQTT協議採用客戶端/伺服器架構,支持發佈/訂閱模式和點對點模式,具有高效、可靠、靈活等優點。
MQTT協議主要由三個要素構成:發佈者(publisher)、代理伺服器(broker)和訂閱者(subscriber)。發佈者將消息發佈到代理伺服器上,訂閱者從代理伺服器中訂閱消息,代理伺服器將消息發送給訂閱者。MQTT協議中還有一個重要的概念是主題(topic),主題用於定義消息的類型和內容,發佈者可以將消息發佈到一個或多個主題上,訂閱者可以訂閱一個或多個主題的消息。
MQTT協議可以在不可靠的網路上以低帶寬傳輸大量消息,適用於各種類型的物聯網應用,例如智能家居、車聯網、工業物聯網等。由於其輕量級、可靠性高、快速響應等優點,MQTT協議在物聯網領域得到了廣泛的應用。
二、MQTTnet簡介
MQTTnet 是一個跨平臺、高性能和開源的 MQTT 客戶端庫和服務端實現,是 .NET 平臺上主流的 MQTT 實現之一。基於 MQTTnet,用戶可以方便地在 .NET 平臺上集成 MQTT 功能,實現 MQTT 協議的消息傳輸等功能。
源碼地址:https://github.com/dotnet/MQTTnet
三、在.NET7中使用MQTTnet****
1、項目準備
首先創建兩個.NET7控制台項目,用來簡單實現發佈消息訂閱功能。一個項目為服務端,一個客戶端。
然後安裝MQTTnet 包,我們這裡選擇安裝3.12版本,MQTTnet跨版本差距比較大。大家可以在Nuget包管理器里安裝,也可以用命令安裝。
dotnet add package MQTTnet --3.12
2、服務端代碼編寫
編寫服務端代碼,片段代碼如下:
public static async Task MQTTP()
{
var factory = new MqttFactory();
var client = factory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
.WithTcpServer("localhost", 1883)
.Build();
await client.ConnectAsync(options);
while (true)
{
Console.WriteLine("輸入要發佈的信息: ");
var message = Console.ReadLine();
var mqttMessage = new MqttApplicationMessageBuilder()
.WithTopic("testTopic")
.WithPayload(Encoding.UTF8.GetBytes(message))
.WithExactlyOnceQoS()
.Build();
await client.PublishAsync(mqttMessage);
}
}
//調用
static async Task Main(string[] args)
{
#region 測試
await MQTTP();
#endregion
}
3、客戶端代碼編寫
在客戶端編寫如下代碼:
public static async Task MQTTClientTest()
{
var factory = new MqttFactory();
var client = factory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
.WithTcpServer("localhost", 1883)
.Build();
client.UseApplicationMessageReceivedHandler(e =>
{
Console.WriteLine($"接收的消息: {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
});
await client.ConnectAsync(options);
await client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("testTopic").Build());
}
//調用
static async Task Main(string[] args)
{
#region 測試
await MQTTClientTest();
#endregion
}
這樣就簡單完成了發佈訂閱的功能,在這個示例中,發佈者將消息發佈到"testTopic"主題,訂閱者訂閱了相同的主題,一旦有新消息到達,就會列印出來。這隻是一個簡單的示例,實際的MQTT使用根據具體的項目場景來使用,比如異常處理等。
4、使用條件和方法:
首先在官網下載安裝MQTT,官網為:https://mqtt.org/。
然後把項目的埠號改成mqtt配置的埠。同時運行兩個項目就可以嘗試了。大家可以拿上面代碼嘗試一下。
結語
本文介紹了MQTT在.NET7的簡單使用,MQTT還有很多功能,大家可以根據MQTTnet 的API來使用其它功能。希望本文能對你帶來收穫,歡迎留言和吐槽。
來源公眾號:DotNet開發跳槽