热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Mqtt使用教程,简介

本文由编程笔记#小编为大家整理,主要介绍了Mqtt使用教程,简介相关的知识,希望对你有一定的参考价值。1,简介MQTT协议(MessageQueui
本文由编程笔记#小编为大家整理,主要介绍了Mqtt使用教程,简介相关的知识,希望对你有一定的参考价值。



1,简介

MQTT协议(Message Queuing Telemetry Transport),翻译过来就是遥信消息队列传输,是IBM公司于1999年提出的,现在最新版本是3.1.1。MQTT是一个基于TCP的发布订阅协议,设计的初始目的是为了极有限的内存设备和网络带宽很低的网络不可靠的通信,非常适合物联网通信

特点:

1轻量,

2可以在网络差的环境中使用  

3 使用发布订阅模式

4遗嘱

5消息有三种QOS(消息质量)0只发布不管关心不收到,1最少收到一次,2确保收到一次,只一次)

 

     越来越的的物联网,互联网应用在使用Mqtt协议,小黄车就是其中之一 。可以被用作即时通讯,消息队列,消息推送(智联招聘企业版就使用mqtt做前端的消息推送)等等。各种语言的成熟库都有。

        总之就是很棒,应用很广,将来会更广。


2 C#中使用Mqtt

Net也很多库

我们这里使用MQTTnet


using MQTTnet;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace AliyunMqtt2
{
class Program
{
static void Main(string[] args)
{

string CId = "1"; //用户标识ID
String userName = "admin"; //用户名
String passWord = "password"; //密码
var will = new MqttApplicationMessage() { Topic = "lastwill", Payload = System.Text.Encoding.UTF8.GetBytes("我掉线了") };//定义遗嘱消息


IMqttClientOptions Option = new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1", 61613)//地址端口号
.WithClientId(CId) //客户端标识Id要唯一。
.WithCredentials(userName, passWord) //用户名,密码
.WithWillMessage(will) //加上遗嘱消息
.WithCleanSession()
.Build();
MqttFactory factory = new MqttFactory();
var mqttClient = factory.CreateMqttClient(); //创建客户端实例
mqttClient.Connected += (object sender, MqttClientConnectedEventArgs e) => //连接成功
{
Console.WriteLine("连接成功:" + CId);
var topics = new List();
topics.Add(new TopicFilter() { Topic = "家具/#" });
mqttClient.SubscribeAsync(topics);//订阅
Console.WriteLine("订阅成功:");
mqttClient.PublishAsync("家具/饮水机/加热/10度", "10");//发布
Console.WriteLine("发布成功");
};
mqttClient.Disconnected += (object sender, MqttClientDisconnectedEventArgs e) =>
{
Console.WriteLine("断开连接:" + CId);
};
mqttClient.ApplicationMessageReceived += (object sender, MqttApplicationMessageReceivedEventArgs e) =>
{
///收到消息
string cOntent= System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
Console.WriteLine($"收到消息 msg={content}:");
};

mqttClient.ConnectAsync(Option);

Console.ReadLine();

}
}
}

  


3 Broker服务搭建

Mqtt需要一个Broker服务器做消息的中转站,所有的客户端发布都是往broker发布,订阅也都是从broker订阅

这里我们介绍两种broker,免费简单的apollo和稳定高性能的阿里云mqtt服务


Apollo

1.下载地址 http://activemq.apache.org/apollo/download.html

2.创建一个broker实例,命令行cd到bin目录,执行/bin/apollo create mybroker,执行后就会在bin目录下创建mybroker文件夹。

3.运行broker实例,命令行cd到mybroker/bin目录,执行mybroker/bin/apollo-broker.cmd run

:apollo依赖java环境。

运行成功的界面

技术分享图片

 

 

4在浏览器查看连接的状况

在浏览器输入 http://127.0.0.1:61680/ 或者 https://127.0.0.1:61681/,默认账号 admin,密码 password

 技术分享图片

 

在这里看当前连接状况

 

 

 

 

 


阿里云 Mqtt搭建

 

 

1,首先要上阿里云购买服务

购买地址https://common-buy.aliyun.com/?commodityCode=onsMqtt#/buy

 

购买成功进入控制台

 技术分享图片

 

要是看不到实例列表的话,注意是否选择对了区域,默认是公网,我这里是华南区

 

选择group管理

 技术分享图片

 

创建一个新的groupid

 

然后就可以使用应用程序连接了

 

常用的net mqtt库有MQTTnet,M2Mqtt我这里使用 MQTTnet

 

 技术分享图片

 

 

使用Nuget安装

 技术分享图片

 

 

此处的username和pwd需要从阿里云账户里面获取

 

 技术分享图片

 

在右上角获取

 技术分享图片

 

这个分别就是key和secret

 

然后连接mqtt的时候username用key

Pwd用groupid加secret的哈希算法得来

 技术分享图片

 

 

   public static string HMACSHA1(string key, string dataToSign)

        {

            Byte[] secretBytes = UTF8Encoding.UTF8.GetBytes(key);

            HMACSHA1 hmac = new HMACSHA1(secretBytes);

            Byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(dataToSign);

            Byte[] calcHash = hmac.ComputeHash(dataBytes);

            String calcHashString = Convert.ToBase64String(calcHash);

            return calcHashString;

        }

 

 

 

 

连接地址

在阿里云的控制台获取 即接入点域名 ,这里就不再需要端口号了

 技术分享图片

 

 技术分享图片

 

 

 

 

 

连接成功

 技术分享图片

 


4 客户端测试工具

 

添加MqttLens

 

使用谷歌浏览器 打开谷歌插架商店搜索MqttLens 并添加到浏览器

 

添加成功后在浏览器打开chrome://apps/

 技术分享图片

 

点击运行添加一个连接

 技术分享图片

 

测试发布订阅

 技术分享图片

 

测试成功

 

 

 

 


5 遗嘱和消息格式


遗嘱

 

遗嘱是mqtt的一个大特点

 

遗嘱的原理:连接成功后立即往往broker发送一条消息(遗嘱),但不生效,当客户端断开连接,broker检测不到心跳时,遗嘱生效。


消息格式

消息格式应当是下功夫去定义的,好的topic格式可以让我们更简洁方便

三种符号

/  代表层级 一般定义消息时都以 /分割成层级

 

比如  家具/饮水机/加热

 

通配符+ 代表一层匹配

 

比如

 技术分享图片

技术分享图片

 

 

比如有设备 饮水机想要订阅 加热和保温两个topic,只需要订阅家具/饮水机/+

 

 

全通配符  # 能完全匹配,不限制层数

 

 技术分享图片

 


6  各种broker服务器对比

Apollo 免费 数量少没问题,数量大就不是很稳定了。而且实测时连接数和机器的内核数有关比如我这里4核的 WinServer最多只能连上512个

 

 

EMQ 国产的。也有免费版。各种服务器的版本都有,也很不错,

这里是官网 http://www.emqtt.com/

 

 

阿里云微消息服务如果可靠性要求比较高,或者客户端的数量比较大时,推荐使用阿里云。价格也不是很贵,安全性高,稳定性很高,这里还是很推荐

 


推荐阅读
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 设计模式——模板方法模式的应用和优缺点
    本文介绍了设计模式中的模板方法模式,包括其定义、应用、优点、缺点和使用场景。模板方法模式是一种基于继承的代码复用技术,通过将复杂流程的实现步骤封装在基本方法中,并在抽象父类中定义模板方法的执行次序,子类可以覆盖某些步骤,实现相同的算法框架的不同功能。该模式在软件开发中具有广泛的应用价值。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
author-avatar
粉红的少女
网络借贷平台http://www.kljie.com/
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有