1. 说明
MQTT 是 IBM 开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过 Twitter 让房屋联网)的通信协议。
Apache Apollo 是一个代理服务器,其是在 ActiveMQ 基础上发展而来的,可以支持 STOMP, AMQP, MQTT, Openwire, SSL, WebSockets 等多种协议。
2. 原理
服务器端创建一个唯一订阅号,发送者可以向这个订阅号中发东西,然后接受者(即订阅了这个订阅号的人)都会收到这个订阅号发出来的消息。以此来完成消息的推送。服务器其实是一个消息中转站。
3. 下载 apache-apollo
apache-apollo 下载地址:http://activemq.apache.org/apollo/download.html
需要下载应用于 Unix/Linux/OS X 的软件包 apache-apollo-1.7.1-unix-distro.tar.gz,如下:
点击 apache-apollo-1.7.1-unix-distro.tar.gz 后进入 http://www.apache.org/dyn/closer.cgi?path=activemq/activemq-apollo/1.7.1/apache-apollo-1.7.1-unix-distro.tar.gz 页面,可以看到很多 apache-apollo-1.7.1-unix-distro.tar.gz 的下载链接,这里选择 HTTP 下的第一个下载链接下载,直接点击即可下载:
4. 创建实例
将下载得到的软件包 apache-apollo-1.7.1-unix-distro.tar.gz 通过 FileZilla 上传到服务器的安装目录下,然后进行解压:
[root@instance-08fakiad bin]# tar -zxvf apache-apollo-1.7.1-unix-distro.tar.gz
接着进入到 apache-apollo-1.7.1 的 bin 目录下:
[root@instance-08fakiad mqtt]# cd apache-apollo-1.7.1/bin/
执行 ./apollo create mybroker 创建实例 mybroker,如下:
[root@instance-08fakiad bin]# ./apollo create mybrokerError: JAVA_HOME is not defined correctly. We cannot execute java[root@instance-08fakiad bin]#
不过此时出现了错误,看错误提示,大概是因为 Linux 服务器没有安装好 Java 运行环境,安装 Java 运行环境的方法,查看“在 Linux 服务器运行 IntelliJ IDEA 开发的 Java 项目”的第2点“2、在 Linux(CentOS) 上安装 Java 环境(使用 yum 安装)”即可;
之后再次执行 ./apollo create mybroker:
[root@instance-08fakiad bin]# ./apollo create mybrokerCreating apollo instance at: mybrokerGenerating ssl keystore...Warning:The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12".You can now start the broker by executing: "/home/mqtt/apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker" runOr you can setup the broker as system service and run it in the background: sudo ln -s "/home/mqtt/apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker-service" /etc/init.d/ /etc/init.d/apollo-broker-service start[root@instance-08fakiad bin]#
提示信息没有出现错误提示了,虽然有一个 Warning,不过指令肯定是执行成功了,另外看提示信息,还说明了如何启动实例的方法,一种是直接启动,一种是设置 broker 作为系统服务,然后在后台中启动它;
5. 修改配置文件
编辑实例目录下的 etc 目录下的 apollo.xml 文件,如下:
[root@instance-08fakiad mqtt]# vim apache-apollo-1.7.1/bin/mybroker/etc/apollo.xml
将
改为:
6. 启动 apollo
创建好实例后,在 apache-apollo-1.7.1/bin 目录下会多出一个以实例名称命名的目录,如下:
[root@instance-08fakiad bin]# ls -lhatotal 24Kdrwxr-xr-x 3 501 games 4.0K Nov 9 16:37 .drwxr-xr-x 7 501 games 4.0K Jan 29 2015 ..-rwxr-xr-x 1 501 games 5.4K Jan 29 2015 apollo-rw-r--r-- 1 501 games 2.9K Jan 29 2015 apollo.cmddrwxr-xr-x 7 root root 4.0K Nov 9 16:37 mybroker
进入到 mybroker 目录下的 bin 目录:
[root@instance-08fakiad bin]# cd mybroker/bin/
可以看到目录中有以下内容:
[root@instance-08fakiad bin]# lsapollo-broker apollo-broker-service
执行以下命令即可启动实例:
[root@instance-08fakiad mqtt]# ./apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker run _____ .__ .__ / _ \ ______ ____ | | | | ____ / /_\ \\____ \ / _ \| | | | / _ \/ | \ |_> > <_> ) |_| |_( <_> )\____|__ / __/ \____/|____/____/\____/ \/|__| Apache Apollo (1.7.1)Loading configuration file '/home/mqtt/apache-apollo-1.7.1/bin/mybroker/etc/apollo.xml'.INFO | OS : Linux 3.10.0-862.11.6.el7.x86_64 ("CentOS Linux release 7.3.1611 (Core) ")INFO | JVM : OpenJDK 64-Bit Server VM 1.8.0_191 (Oracle Corporation)INFO | Apollo : 1.7.1 (at: /home/mqtt/apache-apollo-1.7.1)INFO | OS is restricting the open file limit to: 100000INFO | Accepting connections at: tcp://0.0.0.0:61613INFO | Accepting connections at: tls://0.0.0.0:61614INFO | Starting store: leveldb store at /home/mqtt/apache-apollo-1.7.1/bin/mybroker/dataINFO | Accepting connections at: ws://0.0.0.0:61623/INFO | Accepting connections at: wss://0.0.0.0:61624/INFO | virtual host startup is waiting on store startupINFO | virtual host startup is no longer waiting. It waited a total of 1 seconds.INFO | Administration interface available at: http://0.0.0.0:61680/INFO | Administration interface available at: https://0.0.0.0:61681/
7. 验证
在浏览器中输入地址:http://182.61.23.46:61680/,会自动跳转到 http://182.61.23.46:61680/console/index.html
然后需要输入账号密码,默认的账号密码是 admin 和 password,如下:
登录成功后,显示的界面如下: