一、关于MQTT
1. MQTT 简介
MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。
IBM公司的安迪·斯坦福-克拉克及Cirrus Link公司的阿兰·尼普于1999年撰写了该协议的第一个版本。
该协议的可用性取决于该协议的使用环境。IBM公司在2013年就向结构化资讯标准促进组织提交了 MQTT 3.1 版规范,并附有相关章程,以确保只能对规范进行少量更改。MQTT-SN是针对非 TCP/IP 网络上的嵌入式设备主要协议的变种,与此类似的还有ZigBee协议。
纵观行业的发展历程,“MQTT”中的“MQ” 是来自于IBM的MQ系列消息队列产品线。然而通常队列本身不需要作为标准功能来支持。
可选协议包含了高级消息队列协议,面向文本的消息传递协议,互联网工程任务组约束应用协议,可扩展消息与存在协议,数据分发服务,OPC UA以及web 应用程序消息传递协议。
2. MQTT 特性
MQTT协议工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
(1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
(2)对负载内容屏蔽的消息传输。
(3)使用TCP/IP提供网络连接。
(4)有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次记录无所谓,因为不久后还会有第二次发送。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。
(5)小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
3. MQTT 实现
实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
二、MQTT搭建
你可以通过各种途径对MQTT进行更细致的了解,这篇文章主要是介绍一下如何搭建MQTT。所以还等什么,让我们开始吧!
(1)安装JDK(如果已经安装过的朋友们可以忽略此步骤)
步骤1: -----下载:Java SE Development Kit 8 Downloads
下载地址:(如果失效了,大家自行百度~)
Java SE Development Kit 8www.oracle.com步骤2: ----- 安装完成JDK后,查看JAVAHOME的路径
cd /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
步骤3: -----配置环境变量
如果是第一次配置环境变量,可以使用“vim .bash_profile” 创建一个.bash_profile的隐藏配置文件(如果已存在配置文件,则直接添加配置信息即可)
vim ~/.bash_profile
添加以下配置信息添加到.bash_profile 文件中(这里注意 jdk1.8.0_171.jdk这个需要替换成你自己版本)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH
步骤4: -----使配置生效
source .bash_profile
步骤5: -----查看是否生效
java –version
如果成功会返回这个哦~
(2)下载Apollo
下载地址:(如果失效了,大家自行百度~)
Downloadactivemq.apache.org(3)安装
步骤1:将压缩包解压到~/Library/目录下
步骤2: -----定位到本地文件夹bin目录
cd ~/ Library/apache-apollo-1.7.1/bin
步骤3: -----创建本地的MqttBroker文件夹
./apollo create MqttBroker
步骤4: -----定位到MqttBroker文件夹
cd MqttBroker/bin
步骤5: -----启动服务
启动服务可以使用 apollo-broker run 或 apollo-broker-service start
apollo-broker run
步骤6: -----查看服务进程
ps axu | grep apollo
(4)登陆MQTT服务器,修改配置
步骤1: -----查看IP地址
ifconfig
步骤2:
登录网页,并修改ip地址,以供局域网连接
在浏览器中http://127.0.0.1:61680/console/index.html#,初始用户名为admin,密码是password,打开之后,选择configration下
选择apollo.xml文件,修改<host_name>属性为服务器ip,web_admin同步修改,以及tcp节点下,将默认的tcp://0.0.0.0:61613修改为服务器的IP,以供局域网使用。点击保存,即可在局域网内使用服务器的IP登录
以更改过后的服务器IP登录后,可查看如下信息。此IP在局域网其他客户端均可登录
至此我们搭建任务已经顺利完成!
在终端中control+c 就可以结束服务进程~
下面进行一个连接的小测试
三、MQTT服务器端与单客户端连接测试
步骤1:
在浏览器中输入服务器地址,打开服务器
步骤2:
打开Mqtt.fx软件,配置连接信息,点击Connect连接服务器
步骤3:
查看服务器状态,看见一个当前的connect