C#使用M2Mqtt快速連接MQTT server,C#接收mqtt消息

MQTT簡介

MQTT是一個基於客戶端-服務器的消息發佈/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M)通信和物聯網(IoT)。其在,通過衛星鏈路通信傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。

MQTT消息有三種質量等級

  1. “至多一次”(QoS==0),消息發佈完全依賴底層 TCP/IP 網絡。會發生消息丟失或重複。這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因爲不久後還會有第二次發送。

  2. “至少一次”(QoS==1),確保消息到達,但消息重複可能會發生。

  3. “只有一次”(QoS==2),確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重複或丟失會導致不正確的結果。小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量。

  • 具體使用還要看消息中間件是否支持3種質量等級

使用 M2Mqtt 訂閱 mqtt消息

  1. 新建C#工程,添加M2Mqtt程序包並引用添加M2Mqtt程序包
  2. 使用M2Mqtt訂閱消息
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;


namespace Get_MQTT
{
    class Program
    {
        static void Main(string[] args)
        {
            // MQTT的主題 topic
            string topic = "/mqtt/test";
            // MQTT服務器IP地址
            string host = "127.0.0.1";
            int serverPort = 1883;
            // 實例化Mqtt客戶端 
            MqttClient client = new MqttClient(host, Convert.ToInt32(serverPort), false, null, null, MqttSslProtocols.TLSv1_2);

            // 註冊接收消息事件 
            client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;

            string clientId = Guid.NewGuid().ToString();
            client.Connect(clientId);

            // 訂閱主題 "/mqtt/test", 訂閱質量 QoS 2 
            client.Subscribe(new string[] { topic }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
        }

        static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
        {
            // 打印從訂閱的Topic發佈端收到的消息
            Console.WriteLine(string.Format("subscriber,topic:{0},content:{1}", e.Topic, Encoding.UTF8.GetString(e.Message)));
        }

    }
}

使用中會遇到的問題

M2Mqtt使用起來看似很簡單,但是這只是一個接收消息的例程,實際使用過程中可能還會出現端口變更,連接異常等等問題。
M2Mqtt GitHub地址:https://github.com/eclipse/paho.mqtt.m2mqtt

如果覺得M2Mqtt不夠靈活的話,還可以使用 MqttLib

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章