在Net8.0中使用 MQTTnet 开源库实现 MQTT 应用程序开发(实践) ...

打印 上一主题 下一主题

主题 867|帖子 867|积分 2601


1. 先容

MQTTnet 是一个强大的开源 MQTT 客户端库,适用于 C# 平台。它提供了丰富的功能和灵活的 API,可以轻松地构建基于 MQTT 协议的应用程序。本文将逐步学习如何使用 MQTTnet 库创建 MQTT 客户端,并实现根本的发布、订阅功能。
简介

什么是MQTT?

MQTT的发布和订阅架构

2. 搭建MQTT Broker

在Windows 系统上搭建 MQTT Broker,前一篇文章 Docker部署Eclipse Mosquitto开源MQTT的消息署理情况步调(实践),我们使用docker搭建了Mosquitto情况。如果你以为比较麻烦,也可以使用软件包来搭建情况。

详细的搭建步调,可以查看官网。
3. 安装MQTTnet库


通过 NuGet 包管理器将 MQTTnet 库添加到我们的项目中。

4. 项目编码开发

1. MqttSubscriber项目


  • 新建MqttSubscriber项目。

  • 配置引用MQTTnet库
  1. <Project Sdk="Microsoft.NET.Sdk">
  2.   <PropertyGroup>
  3.     <OutputType>Exe</OutputType>
  4.     <TargetFramework>net8.0</TargetFramework>
  5.     <ImplicitUsings>enable</ImplicitUsings>
  6.     <Nullable>enable</Nullable>
  7.   </PropertyGroup>
  8.         <ItemGroup>
  9.                 <PackageReference Include="MQTTnet" Version="4.3.3.952" />
  10.                 <PackageReference Include="MQTTnet.Extensions.ManagedClient" Version="4.3.3.952" />
  11.         </ItemGroup>
  12. </Project>
复制代码

  • 编写订阅代码
  1. using System.Text;
  2. using MQTTnet;
  3. using MQTTnet.Client;
  4. class Program
  5. {
  6.     static async Task Main(string[] args)
  7.     {
  8.         var options = new MqttClientOptionsBuilder()
  9.             .WithTcpServer("localhost", 1883)
  10.             .WithCredentials("root","root")
  11.             .Build();
  12.         var factory = new MqttFactory();
  13.         var mqttClient = factory.CreateMqttClient();
  14.         mqttClient.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync;
  15.         await mqttClient.ConnectAsync(options);
  16.         await mqttClient.SubscribeAsync("testtopic");
  17.         Console.WriteLine("Press any key to exit.");
  18.         Console.ReadKey();
  19.         await mqttClient.DisconnectAsync();
  20.     }
  21.     private static Task MqttClient_ApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs arg)
  22.     {
  23.         Console.WriteLine($"Received message: {Encoding.UTF8.GetString(arg.ApplicationMessage.PayloadSegment)}");
  24.         return Task.CompletedTask;
  25.     }
  26. }
复制代码
2. MqttPublisher项目


  • 新建MqttPublisher项目。

  • 配置引用MQTTnet库
  1. <Project Sdk="Microsoft.NET.Sdk">
  2.   <PropertyGroup>
  3.     <OutputType>Exe</OutputType>
  4.     <TargetFramework>net8.0</TargetFramework>
  5.     <ImplicitUsings>enable</ImplicitUsings>
  6.     <Nullable>enable</Nullable>
  7.   </PropertyGroup>
  8.         <ItemGroup>
  9.                 <PackageReference Include="MQTTnet" Version="4.3.3.952" />
  10.                 <PackageReference Include="MQTTnet.Extensions.ManagedClient" Version="4.3.3.952" />
  11.         </ItemGroup>
  12. </Project>
复制代码

  • 编写发布代码
  1. using System;
  2. using System.Text;
  3. using System.Threading.Tasks;
  4. using MQTTnet;
  5. using MQTTnet.Client;
  6. using MQTTnet.Extensions.ManagedClient;
  7. class Program
  8. {
  9.     static async Task Main(string[] args)
  10.     {
  11.         var options = new MqttClientOptionsBuilder()
  12.             .WithTcpServer("localhost", 1883)
  13.             .WithCredentials("root", "root")
  14.             .Build();
  15.         var factory = new MqttFactory();
  16.         var mqttClient = factory.CreateMqttClient();
  17.         var managedMqttClient = new MqttFactory().CreateManagedMqttClient();
  18.         await managedMqttClient.SubscribeAsync("testtopic");
  19.         await mqttClient.ConnectAsync(options);
  20.         bool bcontinue = true;
  21.         while (bcontinue)
  22.         {
  23.             string input = $"{DateTime.Now.ToString("HH:mm:ss fff")}:{Guid.NewGuid().ToString()}";           
  24.             Console.WriteLine(input);
  25.             var message = new MqttApplicationMessageBuilder()
  26.                 .WithTopic("testtopic")
  27.                 .WithPayload(Encoding.UTF8.GetBytes(input))
  28.                 .WithQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce)
  29.                 .WithRetainFlag()
  30.                 .Build();
  31.             await mqttClient.PublishAsync(message);
  32.         }
  33.         await managedMqttClient.StopAsync();
  34.     }
  35. }
复制代码

  • 调试运行

5. 参考文档



  • MQTT - The Standard for IoT Messaging
  • Getting started
  • 在.NET7中使用MQTTnet简单实现MQTT通讯 - 翔星 - 博客园

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表