net中MQTT的应用场景
c#常用来开发上位机程序,或者其他一些跟设备打交道比较多的系统,所以会经常作为拥有数据的终端,可以用来采集上传数据,而MQTT也是物联网常用的协议,所以下面介绍在C#开发中使用MQTT。
安装MQTTnet
在c#开发中使用MQTTnet包,在nuget管理器中搜索MQTTnet,然后安装
MQTT使用
添加命名空间
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Protocol;
创建一个MqttClient
Console.WriteLine("Hello, World!");MqttClientOptionsBuilder optionsBuilder = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1", 1883).WithClientId("testClient1");var clientOptions = optionsBuilder.Build();IMqttClient _mqttClient = new MqttFactory().CreateMqttClient();
创建连接
_mqttClient.ConnectAsync(clientOptions);
发送消息
先创建一个mqtt消息,填入主题(Topic),消息内容(PayloadSegment),然后使用PublishAsync
方法发送
var message = new MqttApplicationMessage{Topic = "testtopic/topic1",//主题PayloadSegment = Encoding.Default.GetBytes("test Message"),QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce,Retain = true // 服务端是否保留消息。true为保留,如果有新的订阅者连接,就会立马收到该消息。};_mqttClient.PublishAsync(message);
在mqttx中订阅对应主题,就能收到
订阅主题中#
,表示通配符,说明该分类下testtpoic/
的主题都会订阅。
订阅一个主题
_mqttClient.SubscribeAsync("topic1", MqttQualityOfServiceLevel.AtLeastOnce);
添加各种事件订阅
IMqttClient有下面这些事件可以使用
常用事件的添加:
// 客户端连接成功事件
_mqttClient.ConnectedAsync += MqttClient_ConnectedAsync;
// 客户端连接关闭事件
_mqttClient.DisconnectedAsync += MqttClient_DisconnectedAsync;
// 收到消息事件
_mqttClient.ApplicationMessageReceivedAsync +=MqttClient_ApplicationMessageReceivedAsync;private static Task MqttClient_ConnectedAsync(MqttClientConnectedEventArgs arg)
{Console.WriteLine("客户端已断开与服务端的连接……");return Task.CompletedTask;
}private static Task MqttClient_DisconnectedAsync(MqttClientDisconnectedEventArgs arg)
{Console.WriteLine($"客户端已断开与服务端的连接……");return Task.CompletedTask;
}private static Task MqttClient_ApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs arg
)
{Console.WriteLine($"ApplicationMessageReceivedAsync:客户端ID=【{arg.ClientId}】接收到消息。 Topic主题=【{arg.ApplicationMessage.Topic}】 消息=【{Encoding.UTF8.GetString(arg.ApplicationMessage.PayloadSegment)}】 qos等级=【{arg.ApplicationMessage.QualityOfServiceLevel}】");return Task.CompletedTask;
}
关注可获取更多资料,源码和使用和说明文档↓↓