一、运行环境准备
(一)操作系统:window 7 x64专业版
(二)软件准备
Apollo服务器软件:apache-apollo-1.7.1-windows-distro.zip
java:jdk-8u77-windows-x64.exe (Apollo需要java环境,据官方说得version 1.6以上)
python:python-2.7.12.msi(开发客户端用)
(三)软件安装
1. java安装教程,自行百度,注意配置环境变量;
2. python环境配置
步骤(1):安装python,注意环境变量配置
步骤(2):安装paho-mqtt python包(cmd窗口执行命令)
pip install paho-mqtt
Python环境配置完成。
3. Apollo安装步骤参见:http://activemq.apache.org/apollo/documentation/getting-started.html
步骤(1):解压(cmd窗口运行)
jar -xvf apache-apollo-1.7.1-windows-distro.zip
步骤(2):打开cmd窗口,执行以下步骤
(a)命令行进入Apollo解压出来的文件夹下的bin目录
(b)执行命令
apollo create mybroker
..\bin目录下生成文件夹mybroker(可以换成其他名称)。此时代理默认用户: admin,密码: password
4. Apollo代理配置
(1)进入目录“..\bin\mybroker\etc”,文件列表如图
我们暂时只关注文件:
apollo.xml-------配置代理服务器的端口,包括TCP,ssl,websockets等;
groups.properties--------配置管理用户,应该用来登入apollo后台管理的;
users.properties---------配置用户名和密码。
(2)用文本编辑软件(我用的是sublime text 2)打开user.properties,修改如下。即有两个用户,admin是默认已有用户,marshal是新添加的用户,其密码是123456。
admin=password
marshal = 123456
(3)打开groups.properties,修改如下。除了默认的admin用户,marshal也可以进入后台查看broker的信息。
admins=admin|marshal
(4)打开apollo.xml,一般都不改,我没作修改。简单解释一下重要的几个东西。
web_admin------用来web登录查看Apollo后台信息,浏览器输入:"http://127.0.0.1:61680"和"https://127.0.0.1:61681"即可进入登录界面;
客户端连接broker的端口:TCP------tcp://0.0.0.0:61613,SSL/TLS------tls://0.0.0.0:61614,websockets ws------"ws://0.0.0.0:61623" wss-----"wss://0.0.0.0:61624"。最后这两个什么区别,我不清楚,有知道的大神求普及!
The default configuration with tls/ssl enabled.
mybroker
localhost
127.0.0.1
至此,broker的测试配置完成。
三、MQTT测试
(一)运行broker
1. 打开cmd命令窗口,cd命令进入..\bin\mybroker\bin目录,执行
apollo-broker.cmd run
该命令运行结束后,显示如下图:
2. 浏览器输入“http://localhost:61680” 或者“127.0.0.1:61680”, 登录进入broker后台管理界面(可用admin,也可以用marshal),后台界面如图
(二)客户端开发
1. 创建Python文件sub_pub_ex.py(名称任意),脚本内容如下:
#!/usr/bin/python
import paho.mqtt.client as mqtt
import time
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc)+'\n')
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload)+'\n')
client1 = mqtt.Client()
client1.username_pw_set("marshal", "123456") #username: marshal | password: 123456
client1.on_connect = on_connect
client1.on_message = on_message
client2 = mqtt.Client()
client2.username_pw_set("admin", "password") #username: admin | password: password
client2.on_connect = on_connect
client2.on_message = on_message
HOST = "127.0.0.1" #IP address of broker
client1.connect_async(HOST,61613,60)
client2.connect_async(HOST,61613,60)
client1.loop_start() #client1 runs a thread at background
client2.loop_start() #client2 runs a thread at background
for i in range(30):
time1 = time.time()
client1.subscribe('manipulated') #client1 subcribes a topic 'manipulated'
client2.subscribe('position') #client2 subcribes a topic 'position'
client2.publish('manipulated',i*0.02) #client2 publishes topic 'manipulated' with content 'i*0.02'
client1.publish('position',i) #client1 publishes topic 'position' with content 'i'
time2 = time.time()
interval = time2-time1 #interval in each data exchange
print 'Interval '+str(i)+': '+str(interval)+'\n'
time.sleep(1)
#stop threads in background
client1.loop_stop()
client2.loop_start()
说明:
1)创建了两个客户端:client1(marshal : 123456)和client2(admin : password)
2)脚本功能:client1订阅主题消息“manipulated”,发布主题消息“position”;client2订阅主题消息“position”,发布主题消息“manipulated”。每隔1秒执行一次订阅和发布,共执行10次(i = 0,1,...,9)。
3)记录了每次完成订阅发布消耗的时间,因为是在一台机器上跑的broker和client,所以耗时很少。
其他不懂的请查阅官方文档:https://pypi.python.org/pypi/paho-mqtt
2. 'F5'执行python脚本,即开始运行,上几张运行结果图。
图a. python shell的运行结果
说明:由于我用了connect_async和loop_start,两个客户端在执行callback函数on_message时是后台双线程执行(这个知识点请看paho_mqtt的文档说明),打印出来的订阅消息可能并不规律;不过测试还是挺成功的。
图b. web后台界面(connectors)
说明:有两个客户端连接到broker了,同时可以查看他们发布和接收的消息数目
图c. web后台界面(Virtual Host)
说明:broker的名称为mybroker,通讯过程对两个主题进行交互:manipulated和position。
总结一下,Apollo作broker的配置和操作还是挺简单的,看网上的一些博客说明,感觉比很多broker工具的部署都简单,当然功能比较如何,鄙人没测试过,也没调查过,就不清楚了。paho_mqtt这个库还是比较简单易懂的,也挺好用,尤其它的文档做得比较不错。网上的例程没多少,好多博客基本也都是抄官方文档的。我个人通读了一遍文档,自己改了改,也算是基本掌握了如何使用这个库。