当前位置:网站首页>MQTT入门级简单介绍与使用
MQTT入门级简单介绍与使用
2022-07-28 13:48:00 【斗码士】
1.什么是MQTT
2.MQTT协议实现方式
一.什么是MQTT
什么是快乐星球。。不对。。什么是MQTT
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的轻量级协议,该协议构建于TCP/IP协议之上,MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
(1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
这一点很类似于XMPP,但是MQTT的信息冗余远小于XMPP,,因为XMPP使用XML格式文本来传递数据。
(2)对负载内容屏蔽的消息传输。
(3)使用TCP/IP提供网络连接。
主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。
(4)有三种消息发布服务质量:
"至多一次",消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。
"至少一次",确保消息到达,但消息重复可能会发生。
"只有一次",确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。
(5)小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集",要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。
(6)使用Last Will和Testament特性通知有关各方客户端异常中断的机制。
Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。
Testament:遗嘱机制,功能类似于Last Will。
二.MQTT的实现方式
实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
- (1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
- (2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
三.我经常看到有人说用MQTT来做im
我之前有做IM的,后来换地方所以面试也有被面到过MQTT所以也就一脸懵逼
当时用的是netty做的单体服务器,都知道单台服务正在websockt长连接是没办法持久化到redis里面的,所以也就把长连接对象保存在map里面,就存储量有限,单体服务器就没办法承载下来这么多,负载均衡呢,map对象又没办法共享出去
所以我当时就想到mq,服务器之间互相订阅,我用户注册的时候1~100000在第一台服务器上,100001~200000在第二台服务器上,设置好用户的身份标识,消息发个某个用户,消息--》服务器--》根据标识--》MQ--》对应的服务器--》用户
流程感觉也是可以的 也就是说,我当时并没有用到mqtt,用到了mq
后来我就去了解了一下mqtt,才发现用他来实现im简直可以不用写代码,当然我当时干im有很多地方都有控制到,所以不写代码是做梦
好了,直接拿mqtt干货
我自己架设了rabbitMQ与activeMQ 两种来集成mqtt
这两种mq环境的搭建我就不说了
rabbitMQ 要开起mqtt 在它的sbin目录下用命令执行
rabbitmq-plugins enable rabbitmq_mqtt当然也有web的mqtt
rabbitmq-plugins enable rabbitmq_web_mqtt


如果需要自己的mqtt在其它ip上也能访问,当然也有通过命令来的,但是有界面可以操作为啥要用命令,对吧,哈哈哈

然后就给这个用户分配权限

好了我们现在直接用MQTTBox来测试一下


你可以根据你现有的设置
这个说明已经连接上了


这样就ok了,然你会发现,消息能发了
activeMQ怎么来实现MQTT 呢?
这就更简单了
直接启动activeMQ

然后我们直接访问 http://127.0.0.1:8161/ admin/admin

发现它直接支持了mqtt,好了一样的通过MQTTBox测试

完美 打完ok
边栏推荐
- OKR与GRAD
- 468 product planning and promotion plan (150 copies)
- 软件测试工程师的职业规划
- [translation] how to choose a network gateway for your private cloud
- BGP experiment
- Many "double first-class" universities have launched the research guarantee and prediction name!
- Hcip day 10
- Excel VBA 免密查看VBE加密代码
- [ecmascript6] set and map
- 复制excel行到指定行
猜你喜欢

Tdengine helps Siemens' lightweight digital solutions

软件测试工程师的职业规划

How did Dongguan Huawei cloud data center become a new model of green data center?

UI开发中所遇到的各种坑

企鹅一面:为什么不建议使用SELECT * ?

Hcip day 10

MySQL development skills - View

Forage QR code -- online QR code generator

Xcode编写SwiftUI代码时一个编译通过但导致预览(Preview)崩溃的小陷阱

2022年安全员-A证操作证考试题库模拟考试平台操作
随机推荐
Bulk Rename Utility
Tdengine helps Siemens' lightweight digital solutions
Nport serial server configuration website (whether the serial server is from network port to serial port)
It's so hot that solar power can't take off? Hello, head
2022高处安装、维护、拆除考试题库及在线模拟考试
Summarize the knowledge points of the ten JVM modules. If you don't believe it, you still don't understand it
Introduction to database system (5th Edition) supplementary exercises - Chapter 1 Introduction
[ecmascript6] async and await
C # 7 methods to obtain the current path
How to write test cases in software testing technology
为什么jq的匿名函数 外部可以访问到里面的方法
国产数据库的红利还能“吃”多久?
Hcip day 10
FormData对象的使用, var formdata=new FormData()
[server data recovery] HP StorageWorks series server RAID5 offline data recovery of two disks
(function(global,factory){
Revised version | target detection: speed and accuracy comparison (faster r-cnn, r-fcn, SSD, FPN, retinanet and yolov3)
Database optimization understanding these is enough
Unittest executes runtestcase prompt <_ io. Textiowrapper name= '< stderr>' mode=W encoding=UTF-8 > solution
Mobile phone scrolling screenshot software recommendation