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

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