如果想用C#来和mqtt的服务器进行数据交互的话,有一个常见的选择,那就是 MQTTNET

地址如下:https://github.com/chkr1011/MQTTnet

那个库在最近几个版本升级的过程中,更改了一些api接口,造成了大家的困惑,所以我在hsl中也提供了mqtt的实现类,用法很简单。现在来介绍一下

本库的demo源代码地址:https://github.com/dathlin/HslCommunication

如果想要联系作者,请访问官网:  http://www.hslcommunication.cn/

测试的MQTT界面如下:

然后需要准备mqtt的服务器了,当然了,你可以安装EMQtt的服务器,也可以安装mqttnet的服务器,当然为了尽快的测试,可以使用hsl支持的服务器,虽然目前的支持的功能比较简陋,但是基本的功能都有的。

好了,我们先运行demo,打开服务器

点击start即可。

然后我们新建一个winform项目,然后nuget安装hslcommunication

安装完成后,我们就要在主界面添加一个按钮了。

先定义对象,然后在构造方法里初始化。

        public Form1( )
{
InitializeComponent( ); // 实例化
mqttClient = new MqttClient( new MqttConnectionOptions( )
{
ClientId = "ABC",
IpAddress = "127.0.0.1"
} );
} private MqttClient mqttClient = null;
private void button1_Click( object sender, EventArgs e )
{
// 连接
OperateResult connect = mqttClient.ConnectServer( );
if (connect.IsSuccess)
{
MessageBox.Show( "Success" );
}
else
{
MessageBox.Show( "Failed" );
}
}

  实例化的时候支持设置客户端的ID信息,服务器的地址,端口,超时时间,如果服务器设置了用户名和密码。那么实例化的时候修改成下面的信息

            // 实例化
mqttClient = new MqttClient( new MqttConnectionOptions( )
{
ClientId = "ABC",
IpAddress = "127.0.0.1",
Credentials = new MqttCredential( "admin", "123456" ), // 设置了用户名和密码
} );

  

如何发布消息呢?我们再增加一个按钮。

        private void button2_Click( object sender, EventArgs e )
{
// 测试发布
mqttClient.PublishMessage( new MqttApplicationMessage( )
{
Topic = "A", // 主题
QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce, // 消息等级
Payload = Encoding.UTF8.GetBytes( "This is test message!" ), // 数据
Retain = false, // 是否保留
} );
}

  我们来看看测试效果。

我们看到服务器上接收到客户端的信息,可以方便的知道哪个客户端,发的什么主题,内容是什么。

我们再来看看订阅操作。我们再增加一个按钮,用来订阅操作

        private void button3_Click( object sender, EventArgs e )
{
// 订阅测试,在label1上显示结果
mqttClient.OnMqttMessageReceived += MqttClient_OnMqttMessageReceived; // 调用一次即可
mqttClient.SubscribeMessage( "A" ); // 订阅A的主题
} private void MqttClient_OnMqttMessageReceived( string topic, byte[] payload )
{
// 跨线程更新了UI界面的内容
Invoke( new Action( ( ) =>
{
label1.Text = $"Topic[{topic}] {Encoding.UTF8.GetString( payload )}";
} ) );
}

  

好了我们再来操作以下

我们可以看到我们订阅的A,然后发布的A确实是收到消息了。

实际上MQTT协议的操作就只有这么点,基本就差不多了,但是在发布消息的时候有个属性,

QualityOfServiceLevel

这个需要额外注意一下。有三个选项,最多一次,最少一次,刚好一次,从性能上来说,最多一次最高性能,刚好一次最损耗性能。

所以一般工业现场的实时数据的推送都是最多一次即可。

还有 Retain 属性,含义是,你推上去的消息是否要在服务器本地缓存,缓存之后有什么好处呢?新的客户端订阅消息的时候,会立即推送一次旧数据。这样,你就可以及时的在界面上显示出来。

更多的操作,可以参照demo的源代码。

C# MQTT mqtt客户端,发布订阅消息的更多相关文章

  1. Kafka是分布式发布-订阅消息系统

    Kafka是分布式发布-订阅消息系统 https://www.biaodianfu.com/kafka.html Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apa ...

  2. 高吞吐量的分布式发布订阅消息系统Kafka--安装及测试

    一.Kafka概述 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因 ...

  3. 分布式发布订阅消息系统 Kafka 架构设计[转]

    分布式发布订阅消息系统 Kafka 架构设计 转自:http://www.oschina.net/translate/kafka-design 我们为什么要搭建该系统 Kafka是一个消息系统,原本开 ...

  4. 分布式发布订阅消息系统Kafka

    高吞吐量的分布式发布订阅消息系统Kafka--安装及测试   一.Kafka概述 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览, ...

  5. 发布-订阅消息系统Kafka简介

    转载请注明出处:http://www.cnblogs.com/BYRans/ Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式 ...

  6. Kafka(分布式发布-订阅消息系统)工作流程说明

    Kafka系统架构Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和 ...

  7. kafka 基础知识梳理-kafka是一种高吞吐量的分布式发布订阅消息系统

    一.kafka 简介 今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: 如何收集这些巨大的信息 如何分析它 如何及时做到如上两点 ...

  8. JMS发布/订阅消息传送例子

    前言 基于上篇文章"基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送"很容易就可以编写一个发布/订阅消息传送例子,相关环境准备与该篇文章基本类似,主要 ...

  9. Kafka logo分布式发布订阅消息系统 Kafka

    分布式发布订阅消息系统 Kafka kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳 ...

  10. 【9】JMicro微服务-发布订阅消息服务

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1. JMicro消息服务目前实现特性 a. JMicro只支持发布订阅消息服务,不支持队列式消息服务: b. 不支持消息持 ...

随机推荐

  1. Runtime.getRuntime().exec()实现Java调用python程序

    使用Runtime.getRuntime().exec()来实现Java调用python,调用代码如下所示: import java.io.BufferedReader; import java.io ...

  2. python判断一个数是否为整数

  3. SpringBoot 2 快速整合 | Hibernate Validator 数据校验

    概述 在开发RESTFull API 和普通的表单提交都需要对用户提交的数据进行校验,例如:用户姓名不能为空,年龄必须大于0 等等.这里我们主要说的是后台的校验,在 SpringBoot 中我们可以通 ...

  4. Dart语言概览

    ## Dart特性 Dart同时支持JIT(Just In Time,即时编译)和AOT(Ahead of Time,运行前编译)两种编译模式. **JIT** 在运行时即时编译,在开发周期中使用,可 ...

  5. Mahout介绍、安装与应用案例

        搭建环境 部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放 Hadoop等组件运行包.因为该目录用于安装h ...

  6. Python基础(十)

    今日主要内容 补充:传参与参数分配区别 动态传参 函数注释 名称空间 函数名的使用 函数嵌套 global和nonlocal 补充:传参与参数分配区分 先看一个函数定义和函数调用 def func(a ...

  7. [Pandas] 06 - Data Preprocessing and Cleaning

    From: DBWangGroup 基于该系列代码的实践与补充思考. 补充:特征工程 结合:[Scikit-learn] 4.3. Preprocessing data /* implement */

  8. kubernetes实战(二十六):kubeadm 安装 高可用 k8s v1.16.x dashboard 2.x

    1.基本配置 基本配置.内核升级.基本服务安装参考https://www.cnblogs.com/dukuan/p/10278637.html,或者参考<再也不踩坑的Kubernetes实战指南 ...

  9. Audio Bit Depth Super-Resolution with Neural Networks

    Audio Bit Depth Super-Resolution with Neural Networks 作者:Thomas Liu.Taylor Lundy.William Qi 摘要 Audio ...

  10. Spark Streaming 入门

    概述 什么是 Spark Streaming? Spark Streaming is an extension of the core Spark API that enables scalable, ...