首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

.CORE 5 Web Api和客户端MQTT

.CORE 5 Web API 和客户端 MQTT 基础概念

.NET Core 5 Web API 是微软推出的一个开源、跨平台的框架,用于构建基于HTTP的Web API。它允许开发者使用C#和其他.NET语言来创建RESTful服务。

MQTT (Message Queuing Telemetry Transport) 是一种轻量级的消息传输协议,设计用于低带宽、高延迟或不可靠的网络环境。它广泛应用于物联网(IoT)设备之间的通信。

相关优势

.NET Core 5 Web API 的优势:

  • 跨平台支持:可以在Windows、Linux和macOS上运行。
  • 高性能:基于.NET Core的高性能运行时。
  • 易于部署:支持自包含部署和依赖项共享。
  • 强大的工具链:包括Visual Studio Code、dotnet CLI等。

MQTT 的优势:

  • 轻量级:协议设计简单,数据传输开销小。
  • 发布/订阅模式:支持一对多的消息传递。
  • 可靠性:支持QoS级别,确保消息的可靠传递。
  • 广泛支持:许多物联网设备和平台都支持MQTT。

类型

.NET Core 5 Web API:

  • RESTful API:基于HTTP方法(GET、POST、PUT、DELETE等)进行资源操作。
  • GraphQL API:支持客户端查询所需的数据。

MQTT:

  • 消息类型:CONNECT、PUBLISH、SUBSCRIBE、UNSUBSCRIBE、PINGREQ、PINGRESP、DISCONNECT。
  • QoS级别:0(最多一次)、1(至少一次)、2(恰好一次)。

应用场景

.NET Core 5 Web API:

  • 构建Web应用程序的后端服务。
  • 提供API接口供移动应用或其他客户端调用。
  • 实现微服务架构中的服务间通信。

MQTT:

  • 物联网设备之间的通信。
  • 实时数据传输,如传感器数据、日志消息等。
  • 移动应用与服务器之间的实时通信。

遇到的问题及解决方法

问题1:.NET Core 5 Web API 无法接收MQTT消息。

原因:可能是由于.NET Core 5 Web API没有配置相应的MQTT客户端库或监听端口。

解决方法

  1. 安装MQTT客户端库,如MQTTnet
  2. 在.NET Core 5 Web API项目中配置MQTT客户端,监听指定的MQTT服务器端口。
  3. 确保防火墙或安全组允许相应的端口通信。

示例代码

代码语言:txt
复制
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.Options;
using System;
using System.Threading.Tasks;

public class MqttClientService
{
    private IMqttClient _mqttClient;

    public async Task ConnectAsync(string serverUri, string clientId)
    {
        var factory = new MqttFactory();
        _mqttClient = factory.CreateMqttClient();

        var options = new MqttClientOptionsBuilder()
            .WithTcpServer(serverUri)
            .WithClientId(clientId)
            .Build();

        _mqttClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(e =>
        {
            Console.WriteLine("Received message: " + Encoding.UTF8.GetString(e.ApplicationMessage.Payload));
        });

        await _mqttClient.ConnectAsync(options);
    }

    public async Task PublishAsync(string topic, string payload)
    {
        var message = new MqttApplicationMessageBuilder()
            .WithTopic(topic)
            .WithPayload(payload)
            .Build();

        await _mqttClient.PublishAsync(message);
    }
}

参考链接

请注意,以上示例代码仅用于演示如何在.NET Core 5 Web API项目中集成MQTT客户端功能。实际应用中可能需要根据具体需求进行调整和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • MQTT服务器部署

    现在物联网常用的通信方式有哪些?RF433/315M、蓝牙、Zigbee、wifi、以太网等等,通信协议也按不同功能分了许多种,例如TCP、MQTT等,具体可到https://blog.csdn.net/sinat_36098122/article/details/80930168 研究。我当前用的比较多的是MQTT协议,它被较多的用来需要省电的设备通信上,采用发布/订阅的形式传输消息,具体可参考https://www.cnblogs.com/skullboyer/p/9085210.html。 要使用MQTT通信,就少不了MQTT服务器,它是消息传送的中转站(代理)。也就是说MQTT服务器并不存储消息,消息的发布与接收都由客户端完成。我主要写一下目前也是较流行的两者MQTT服务器的搭建:EMQ和Mosquitto。这两种服务器都是开源的,这里写的是部署在windows服务器上的方法(没办法菜鸟只能搞win,以后再玩玩Linux)。

    02

    ACP互联网架构认证笔记-MQ消息队列服务

    MQ是消息服务中间件,基于高可用分布式集群技术,是消费模式基于发布订阅模式的消息系统。支持Java,C++以及.NET,PHP,Python,为分布式应用系统提供异步解耦、削峰填谷的能力,具备海量消息堆积、高吞吐、可靠重试等特性。具有消息查询,消息回溯(不是消息撤回,也不支持消息撤回),消息轨迹查询,堆积监控报警功能。 MQ协议支持接入方式 : TCP、HTTP(RESTful 风格)、MQTT。MQ支持公网访问,但可用性较低。 MQ应用场景 : 分布式事务,物联网应用,实时计算(将产生的数据实时流入到实时计算引擎来实现),同步大规模缓存。 实时计算引擎一般有 : Spark / Storm / EMR / ARMS / BeamRunner。 MQ拥有管理工具 : Web控制台,Open API,mqadmin命令集。拥有微消息队列(LMQ),RocketMQ消息队列,Kafka消息队列,跨域中继服务(CRS)等组件。 Web控制台提供消息查询、消息轨迹查询、重置消费位点、资源统计、监控报警等操作。消息查询有三种方式 :** 根据Message ID(精确查询),Message Key(模糊查询)以及Topic查询(范围查询),HTTP消息目前只支持Message ID和Topic两种查询方式。** 消息轨迹查询只支持TCP和HTTP协议,可追踪消息从生产者发出到消费者消费的整个链路中各个相关节点的时间地点。 重置消费位点可跳过堆积的消息,即不想消费这部分消息,或者只想消费某个时间点后的消息(这些消息不论之前是否消费过)。 资源报表可对消息发送和消息消费的数据进行统计,暂不支持HTTP消费数据的统计查询。 监控报警一般用在消息堆积数或者延迟时间超过阈值之后,对报警接收人发送短信,如果发现消息堆积很多,可检查阈值是否设置过小导致消息堆积,可调整业务代码或者对消费者进行扩容,可使用jstack查看是否消费线程阻塞。 微消息队列(LMQ)基于MQTT(Message Queuing Telemetry Transport 消息队列遥测传输)协议,标准协议端口为1883,支持加密SSL,WebSocket,Flash接入方式。协议重要部分主要分为 : MQ Core Service(负责底层的消息存储和分发),MQ私有协议服务器以及MQTT协议网关服务器(负责对客户端提供服务和协议转换)。主要使用场景有 : 直播互动、车联网、金融支付、即时聊天等。协议相关 : QoS(Quality of Service)指代消息传输的服务质量。它包括QoS0(最多分发一次)、QoS1(至少达到一次)和QoS2(仅分发一次)三种级别。cleanSession标识客户端建立TCP连接后是否关心之前状态(true or false)。 MQTT可进行实例管理(查看消息收发TPS、同时在线连接数、订阅关系数等信息,可设置实例报警),可申请MQTT Topic,可为Topic申请MQTT Group ID(一组逻辑功能完全一致的节点共用的组名,代表一类相同功能的设备,必须拥有Topic的读写权限)。可进行签名计算和签名生成。 MQTT可获取离线消息,可主动拉取离线消息,客户端每次拉取消息数量最多为30条,拉取请求的最大频率限制为5次/秒。离线消息优先级低,对其进行有限和最终能处理即可,要求比较实时。 MQTT可获取客户端上下线事件(上下线事件触发时,会向后端MQ推送一条上下线消息,通过订阅这条消息获取),上下线事件类型一般放在MQ的Tag中,有三种状态 : connect(客户端上线),disconnect(客户端主动断开连接),tcpclean(实际的TCP连接断开)。tcpclean代表客户端网络层连接的真实断开,判断客户端下线请使用tcpclean事件。 MQTT通过Token鉴权服务向客户端提供访问权限。客户端需要采用MQTT控制报文以同步发送模式并且QoS必须为1,来上传Token。客户端应该对Token做好持久化,监听Proxy下推的Token失效的通知消息,Token失效必须重新申请。 LMQ的Topic,ClientId长度最大为64个字符,消息大小最大为64K,消息保存时间最长为3天,单个客户端订阅Topic数量最大为30个(超过该限制数量的Topic会被丢弃),消息顺序性为上行顺序。 跨域中继服务(CRS,跨域哦,实现服务发布与订阅,实现不同网络的服务互通)提供三种MQ消息发送方式 :可靠同步发送(发出消息响应后才能发下一个消息,应用场景广,如重要通知邮件、报名短信通知、营销短信系统),可靠异步发送(不需要等待响应即可发下一个消息,应用场景一般是耗时长,对RT响应敏感的业务,如视频上传后通知转码服务,转码后通知推送转码结果),One Way(单向发送,不需要响应的方式,耗时超短,对可靠性要求不高的场

    03

    [物联网]2.2接收数据

    数据接收服务器的作用 数据接收服务器就跟它的字面意思一样,负责接收从设备发送来的数据。它在设备和系统之间起着桥梁作用。有很多种方法可以从设备把数据发送给服务器,其中具有代表性的包括以下两种方法。 ● 准备一个使用了 HTTP 协议的 Web API 来访问设备(如通常的 Web 系统) ● 执行语音和视频的实时通信(如 WebSocket 和 WebRTC) 除此之外,还出现了一种名为 MQTT 的、专门针对物联网的新型通信协议。 本章将为大家介绍 HTTP 协议、 WebSocket、 MQTT 这几个典型协议。 HTTP 协议 HTTP 协议提供的是最大众化且最简易的方法。使用一般的 Web 框架就可以制作数据接收服务器。设备用 HTTP 的 GET 方法和 POST 方法访问服务器,把数据存入请求参数和 BODY 并发送(图 2.6)。 HTTP 协议是 Web 的标准协议,这一点自不用说。因此 HTTP 协议和 Web 的兼容性非常强。此外,因为 HTTP 协议有非常多的技术诀窍,所以我们必须在制作实际系统时审视服务器的结构,应用程序的架构以及安全性等。关于这点,有很多事例值得参考。另外, HTTP 协议还准备了 OSS 的框架,方便人们使用。

    03

    【愚公系列】2023年01月 Dapr分布式应用运行时-交通控制应用程序

    交通控制示例应用程序模拟高速公路交通控制系统。 其用途是检测超速车辆,并向违规司机发送罚款通知。 这些系统实际上存在于现实生活中,下面是它们的工作原理。 一组摄像头(每个车道上方各一个)被放置在高速公路的起点和终点(假设该路段为 10 公里),没有上匝道或下匝道。 当车辆在摄像头下方经过时,摄像头会拍摄车辆照片。 使用光学字符识别 (OCR) 软件,从照片中提取车辆的车牌号。 系统使用每个车辆的入口和出口时间戳来计算该车辆的平均速度。 如果平均速度高于高速公路的最大速度限制,系统会检索司机信息并自动发送罚款通知。

    03
    领券