MQTT简介
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
MQTT消息有三种质量等级
-
“至多一次”(QoS==0),消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
-
“至少一次”(QoS==1),确保消息到达,但消息重复可能会发生。
-
“只有一次”(QoS==2),确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
- 具体使用还要看消息中间件是否支持3种质量等级
使用 MqttLib 订阅 mqtt消息
- 新建C#工程,并引用MqttLib
- 实例化 mqtt client
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MqttLib;
using System.Diagnostics;
using System.IO;
namespace mqttlib_mqtt
{
class Program
{
IMqtt _client;
static void Main(string[] args)
{
string connectionString = "tcp://127.0.0.1:1884";
string clientId = Guid.NewGuid().ToString();
Console.WriteLine("正在启动mqtt示例程序");
Console.WriteLine("按任意键可以退出本程序\n");
Program prog = new Program(connectionString, clientId);
prog.Start();
Console.ReadKey();
prog.Stop();
}
Program(string connectionString, string clientId)
{
// 实例化 MqttClientFactor
_client = MqttClientFactory.CreateClient(connectionString, clientId);
// 设置客户端回调
_client.Connected += new ConnectionDelegate(client_Connected);
_client.ConnectionLost += new ConnectionDelegate(_client_ConnectionLost);
_client.PublishArrived += new PublishArrivedDelegate(client_PublishArrived);
}
void Start()
{
// 使用 'CleanStart' 模式启动连接
Console.WriteLine("连接mqtt服务器\n");
_client.Connect(true);
}
void Stop()
{
if (_client.IsConnected)
{
Console.WriteLine("客户端断开\n");
_client.Disconnect();
Console.WriteLine("客户端已经断开连接\n");
}
}
void client_Connected(object sender, EventArgs e)
{
Console.WriteLine("客户端已经连接\n");
RegisterOurSubscriptions();
PublishSomething();
}
void _client_ConnectionLost(object sender, EventArgs e)
{
Console.WriteLine("连接异常断开\n");
}
// 注册 Topic
void RegisterOurSubscriptions()
{
Console.WriteLine("订阅mqtt Topic:mqtt/test/res/#\n");
_client.Subscribe("mqtt/test/res/#", QoS.AtLeastOnce);
}
// 发布 mqtt 消息
void PublishSomething()
{
Console.WriteLine("发布mqtt消息到:mqtt/test/res\n");
// 设置Topic,要发送的消息,消息等级
_client.Publish("mqtt/test/res", "测试数据", QoS.AtLeastOnce, false);
}
// 处理收到的 mqtt 消息
bool client_PublishArrived(object sender, PublishArrivedArgs e)
{
Console.WriteLine("收到的消息:");
Console.WriteLine("Topic: " + e.Topic);
Console.WriteLine("Payload: " + e.Payload);
Console.WriteLine();
return true;
}
}
}
- MqttLib.dll 下载地址:https://download.csdn.net/download/qq_36963372/11523102