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. 不支持消息持 ...
随机推荐
- MyBatis的发展和选型
xlecho编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! 参考 ...
- FreeSql (十九)多表查询
多表查询,常用的有联表 LeftJoin/InnerJoin/RightJoin ,这三个方法在上篇文章已经介绍过. 除了联表,还有子查询 Where Exists,和 Select 子表: IFre ...
- Unity3D_04_GameObject,Component,Time,Input,Physics
Unity3D是一个Component-Based的游戏引擎,并且为GamePlay Programmer提供了很多游戏性层上的支持. 1.可以在图形界面上设计动画状态转换的Animator. 2.可 ...
- 5分钟学linux命令之split
情景介绍 平时工作中,我习惯使用rz从本地上传文件到服务器,sz从服务器下载文件到本地,但对传输文件大小有限制,例如排查线上jvm的问题,需要生成了dump文件,可能有10G大,超过了限制,怎么下载呢 ...
- Spring——面向切面编程(AOP)详解
声明:本博客仅仅是一个初学者的学习记录.心得总结,其中肯定有许多错误,不具有参考价值,欢迎大佬指正,谢谢!想和我交流.一起学习.一起进步的朋友可以加我微信Liu__66666666 这是简单学习一遍之 ...
- AppScan工具介绍与安装
本文仅供个人参考学习,如做商业用途,请购买正版,谢谢! 介绍 AppScan是IBM公司出的一款Web应用安全测试工具,采用黑盒测试的方式,可以扫描常见的web应用安全漏洞.其工作原理,首先是根据起始 ...
- Python学习-列表深浅拷贝
一.先看一个简单的赋值语句 lst1 = ['France', 'Belgium', 'England'] lst2 = lst1 # lst1.append('Uruguay') lst2.appe ...
- Hadoop 文件系统命令行基础
Hadoop 命令行最常用指令篇: 1.ls (list directory) Usage: hadoop fs -ls [R] Option: -R => 递归显示 2.mkdir (mak ...
- sublime_REPL使用及安装教程(解决Sublime无交互问题)
谈到python编程工具能想到那些? pycharm?IDLE? Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等,还可自定义键绑定,菜单和工具栏. ...
- 23种设计模式之装饰器模式(Decorator Pattern)
装饰器模式(Decorator Pattern) 允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包 ...