mqtt协议之Apache Apollo 安装和配置

由于项目需要用到mqtt来做推送 ,所有找了下资料,不过配置这块讲解的都不太详细,所以做一篇攻略来给需要填坑的朋友一起交流.

分三部分来讲解:

一:什么是mqtt

二:中间件的选择(我们用到的是Apache Apollo)

三:配置和使用构思

一:什么是mqtt:

简介:

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

MQTT的网络层级

工作原理:

扫描二维码关注公众号,回复: 5754955 查看本文章

发布订阅示意图

如上图所示,客户端A连接到消息代理(message broker),消息代理返回确认消息。客户B发布消息温度25度,客户A订阅‘温度’,消息代理吧消息推给客户A,客户A发布温度20度,但客户B没有订阅,消息代理不推送。消息B又发布了温度38度,客户A就再次收到订阅的消息38度。最后客户端断开连接。整个过程非常简单清晰,容易理解。

MQTT消息的QOS

MQTT支持三种QOS等级:

QoS 0:“最多一次”,消息发布完全依赖底层 TCP/IP 网络。分发的消息可能丢失或重复。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久后还会有第二次发送。

QoS 1:“至少一次”,确保消息可以到达,但消息可能会重复。

QoS 2:“只有一次”,确保消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。

MQTT的消息类型

1 CONNECT – 连接服务端:客户端到服务端的网络连接建立后, 客户端发送给服务端的第一个报文必须是CONNECT报文

2 CONNACK – 确认连接请求:服务端发送CONNACK报文响应从客户端收到的CONNECT报文。 服务端发送给客户端的第一个报文必须是CONNACK。如果客户端在合理的时间内没有收到服务端的CONNACK报文, 客户端应该关闭网络连接。合理的时间取决于应用的类型和通信基础设施。

3 PUBLISH – 发布消息:PUBLISH控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息。

4 PUBACK –发布确认:PUBACK报文是对QoS 1等级的PUBLISH报文的响应。

5 PUBREC – 发布收到( QoS 2, 第一步):PUBREC报文是对QoS等级2的PUBLISH报文的响应。 它是QoS 2等级协议交换的第二个报文。

6 PUBREL – 发布释放( QoS 2, 第二步):PUBREL报文是对PUBREC报文的响应。 它是QoS 2等级协议交换的第三个报文。

7 PUBCOMP – 发布完成( QoS 2, 第三步):PUBCOMP报文是对PUBREL报文的响应。 它是QoS 2等级协议交换的第四个也是最后一个报文。

8 SUBSCRIBE - 订阅主题:客户端向服务端发送SUBSCRIBE报文用于创建一个或多个订阅。 每个订阅注册客户端关心的一个或多个主题。 为了将应用消息转发给与那些订阅匹配的主题, 服务端发送PUBLISH报文给客户端。 SUBSCRIBE报文也( 为每个订阅) 指定了最大的QoS等级, 服务端根据这个发送应用消息给客户端。

9 SUBACK – 订阅确认:服务端发送SUBACK报文给客户端, 用于确认它已收到并且正在处理SUBSCRIBE报文。

10 UNSUBSCRIBE –取消订阅:客户端发送UNSUBSCRIBE报文给服务端, 用于取消订阅主题。

11 UNSUBACK – 取消订阅确认:服务端发送UNSUBACK报文给客户端用于确认收到UNSUBSCRIBE报文。

12 PINGREQ – 心跳请求:客户端发送PINGREQ报文给服务端的。 用于:1. 在没有任何其它控制报文从客户端发给服务的时, 告知服务端客户端还活着。2. 请求服务端发送 响应确认它还活着。3. 使用网络以确认网络连接没有断开。

13 PINGRESP – 心跳响应:服务端发送PINGRESP报文响应客户端的PINGREQ报文。 表示服务端还活着。

14 DISCONNECT –断开连接:DISCONNECT报文是客户端发给服务端的最后一个控制报文。 表示客户端正常断开连接。

二:中间件的选择和配置

mqtt常用的中间件有mosquitto和apache-appollo 

1:mosquitto:一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。一个典型的应用案例就是 Andy Stanford-ClarkMosquitto(MQTT协议创始人之一)在家中实现的远程监控和自动化。并在 OggCamp 的演讲上,对MQTT协议进行详细阐述。

2:Apache Apollo:网上对此全面的介绍比较少 

Apache Apollo说白了其实很简单,就是在服务器端创建一个唯一订阅号,发送者可以向这个订阅号中发东西,然后接受者(即订阅了这个订阅号的人)都会收到这个订阅号发出来的消息。以此来完成消息的推送。服务器其实是一个消息中转站。

本次我们用到的是Apache Apollo,因为他用起来比较简单,配置比较少

3:安装和配置

一、安装 apache-apollo服务器

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

我的使用环境是windows7

2.下载文件目录(注意:开始看教程说直接打开bin目录下的apollo.cmd文件,闪退,原因是没有java_home环境,必须添加java环境):

3.安装好java的jdk,部署好java环境变量后(必须),管理员运行cmd

4.打开你的apache-apollo文件位置(使用cd apache-apollo目录打开),如下:

5.执行命令:apollo create myapollo C:\apache-apollo\broker ,创建完broker之后c盘会出现下列文件:

6.进入C:\apache-apollo\broker\bin目录下,执行如下命令:apollo-broker run

7.执行成功后返回:

8.打开http://127.0.0.1:61680/,用户名admin, 密码password:

当前连接状态如下:

二、使用谷歌MQTTLens工具测试(我的扩展程序商店打不开,是下好程序解压,加载进来的):

详细参照教程:http://swf.com.tw/?p=1009

我的配置如下:

 

 三、apache-apollo文件下有个使用demo:

 

 如下:

三:配置和使用构思

1.修改端口

找到 C:\apache-apollo\broker\etc文件,就是自己创建代理的位置下etc文件夹

打开之后

所有配置文件都在这里 ,下面我们修改端口,用编辑器打开apollo.xml

修改tcp开头的 ,这是我们常用的 ,修改成自己的端口

2.添加用户

用编辑器打开users.properties

想要添加用户的话在这里 ,格式: 用户名=密码

这里我们已经添加了两个用户

然后编辑groups.properties文件

这里我们已经把刚才在users.properties文件中添加的用户增加上去了 ,否则刚才加的用户不起作用的

3.点对点解决方案:因为mqtt是多对多的协议,需要点对点的时候我们需要转变下思路,

这样的话 设备想和服务端单独通信的时候:设备发布test主题消失,服务器收到之后发布对应设备的主题消息就行了 

如:设备1发送 主题为test的消息 hello,我是clent1 

     服务器返回 主题为clent1的消息 hello,我是server

全部推送:

    服务器发送 主题为push的消息 hello,我是server ,所有设备都能收到

结尾:这里我们已经配置好了自己的mqtt服务了 ,再重新启动一下服务 ,然后用模拟器就可以测试了 

文献:https://baijiahao.baidu.com/s?id=1608411516249221334&wfr=spider&for=pc

        https://www.cnblogs.com/xiaojitui/p/7874654.html

猜你喜欢

转载自blog.csdn.net/qq_41981956/article/details/88745287
今日推荐