C# MQTT mqtt客户端,发布订阅消息
如果想用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客户端,发布订阅消息的更多相关文章
- Kafka是分布式发布-订阅消息系统
Kafka是分布式发布-订阅消息系统 https://www.biaodianfu.com/kafka.html Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apa ...
- 高吞吐量的分布式发布订阅消息系统Kafka--安装及测试
一.Kafka概述 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因 ...
- 分布式发布订阅消息系统 Kafka 架构设计[转]
分布式发布订阅消息系统 Kafka 架构设计 转自:http://www.oschina.net/translate/kafka-design 我们为什么要搭建该系统 Kafka是一个消息系统,原本开 ...
- 分布式发布订阅消息系统Kafka
高吞吐量的分布式发布订阅消息系统Kafka--安装及测试 一.Kafka概述 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览, ...
- 发布-订阅消息系统Kafka简介
转载请注明出处:http://www.cnblogs.com/BYRans/ Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式 ...
- Kafka(分布式发布-订阅消息系统)工作流程说明
Kafka系统架构Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和 ...
- kafka 基础知识梳理-kafka是一种高吞吐量的分布式发布订阅消息系统
一.kafka 简介 今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: 如何收集这些巨大的信息 如何分析它 如何及时做到如上两点 ...
- JMS发布/订阅消息传送例子
前言 基于上篇文章"基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送"很容易就可以编写一个发布/订阅消息传送例子,相关环境准备与该篇文章基本类似,主要 ...
- Kafka logo分布式发布订阅消息系统 Kafka
分布式发布订阅消息系统 Kafka kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳 ...
- 【9】JMicro微服务-发布订阅消息服务
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1. JMicro消息服务目前实现特性 a. JMicro只支持发布订阅消息服务,不支持队列式消息服务: b. 不支持消息持 ...
随机推荐
- Nginx实现高可用(了解)
使用nginx实现反向代理和负载均衡时,nginx就是整个网站的入口了,所以需要保证nginx的高可用 主要资料包:链接:https://pan.baidu.com/s/1z_-xEM3uUICtZi ...
- Java 多线程实现接口Runnable和继承Thread区别(转)
Java 多线程实现接口Runnable和继承Thread区别 Java中有两种实现多线程的方式.一是直接继承Thread类,二是实现Runnable接口.那么这两种实现多线程的方式在应用上有什么区别 ...
- HTML连载37-边框属性(下)、边框练习
一.边框属性 1.连写(分别设置四条边的边框) border-width:上 右 下 左: border-style:上 右 下 左: border-color:上 右 下 左: 注意点: (1)这三 ...
- Nginx的架构及工作流程
NGINX是一个免费的,开源的,高性能的HTTP服务器和反向代理,以及IMAP / POP3代理服务器.NGINX以其高性能,稳定性,丰富的功能集,简单的配置和低资源消耗而闻名,也是为解决C10K问题 ...
- [MySQL] 02- Optimisation solutions
前言 一.资源 MySQL 对于千万级的大表要怎么优化? - MySQL - 知乎[方法论] MySQL大表优化方案[一些优化的细节操作] MySQL大表优化方案[一些优化的细节操作] 分布式数据库下 ...
- 部署Tomcat 环境
部署Tomcat 环境(mysql+tomcat+jdk) 1.下载Tomcat 软件包 2.通过xftp创建root 连接,然后将Tomcat 软件包拖拽到/opt目录下 3.在xshell 上ro ...
- 2018年蓝桥杯java b组第八题
标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞" ...
- MySQL在Linux系统环境的安装和无主机登录配置
将mysql 安装在单个Linux系统主机,并配置本地或远程(此处可仅单指局域状态下的环境)的无主机登录.谨记的是:操作完mysql 设置时,需以flush privileges进行权限 ...
- Spring MVC-从零开始-EL(未完待续)
Spring MVC-从零开始-EL(未完待续)
- java使用POI操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...