MQTT,看MQ就能想到,是基于发布/订阅模式的方式,它是工作在TCP/IP协议上,为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,常常在移动端中会使用到它。
本文章使用阿里云服务器搭建MQTT服务器测试方式,使用服务器系统为CenterOS,这里使用Apollo做服务搭建,作为中间件。MQTT服务器搭建方式挺多的,也各有各的有点,可参考here。
一. 服务器搭建
在官网寻找下载地址,下载压缩包,并解压
- 下载,使用wget方式下载
wget http://mirrors.tuna.tsinghua.edu.cn/apache/activemq/activemq-apollo/1.7.1/apache-apollo-1.7.1-unix-distro.tar.gz
- 下载后解压
tar -zxvf apache-apollo-1.7.1-unix-distro.tar.gz
- 进入apache-apollo-1.7.1/bin目录
- ./apollo 可以查看帮助
# ./apollo
usage: apollo [--log <log_level>] <command> [<args>]
The most commonly used apollo commands are:
create creates a new broker instance
disk-benchmark Benchmarks your disk's speed
help Display help information
version Displays the broker version
See 'apollo help <command>' for more information on a specific command.
- 创建一个Broker示例:/apollo create mybroker,MQTT服务器叫Broker。
# ./apollo create mybroker
Creating apollo instance at: mybroker
Generating ssl keystore...
You can now start the broker by executing:
"/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker" run
Or you can setup the broker as system service and run it in the background:
sudo ln -s "/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker-service" /etc/init.d/
/etc/init.d/apollo-broker-service start
后面会有提示怎么启动服务器,以及创建一个service。
启动Apollo :
# ./mybroker/bin/apollo-broker run
_____ .__ .__
/ _ \ ______ ____ | | | | ____
/ /_\ \\____ \ / _ \| | | | / _ \
/ | \ |_> > <_> ) |_| |_( <_> )
\____|__ / __/ \____/|____/____/\____/
\/|__| Apache Apollo (1.7.1)
Loading configuration file '/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/etc/apollo.xml'.
INFO | OS : Linux 3.2.0-23-generic-pae (Ubuntu 12.04 LTS)
INFO | JVM : Java HotSpot(TM) Server VM 1.8.0_144 (Oracle Corporation)
INFO | Apollo : 1.7.1 (at: /home/tarena/project/MQTT/apache-apollo-1.7.1)
INFO | OS is restricting the open file limit to: 100000
INFO | Accepting connections at: tcp://0.0.0.0:61613
INFO | Accepting connections at: tls://0.0.0.0:61614
INFO | Starting store: leveldb store at /home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/data
INFO | Accepting connections at: ws://0.0.0.0:61623/
INFO | Accepting connections at: wss://0.0.0.0:61624/
INFO | Administration interface available at: https://127.0.0.1:61681/
INFO | Administration interface available at: http://127.0.0.1:61680/
然后服务器就启动成功了,当然也可以用第二个方式,启动service
- 阿里云配置
在阿里云上,默认是禁止外网访问的,所以需要配置安全组和防火墙,指定对应的ip。配置了之后我发现也不行。然后做如下处理后生效:
<!--配置参考如上说明。若非本机安装,修改控制台web_admin的ip地址,以便访问控制台。-->
<web_admin bind="http://0.0.0.0:61680"/>
<web_admin bind="https://0.0.0.0:61681"/>
所以在创建的mybroker中etc配置目录,并在apollo.xml中配置前面的说明。然后再启动服务,ok可以在外网访问了。
- 配置好后,则可在网页上访问
默认用户名为:admin
默认密码为:password
- Virtual Hosts 首页订阅主题查看
- Connectors 连接用户查看
- Operating Environment
显示一些操作环境信息,Apollo版本、系统版本、内存、CPU、线程等
Configuration 配置信息
在终端中,为创建mybroker中etc目录下。在这里在网页方式显示出来了,可在网页上直接修改。
- users.properties:用户名和密码在此设置
- apollo.xml:web访问端口,和各个连接类型端口
<!-- http访问端口-->
<web_admin bind="http://0.0.0.0:61680"/>
<!-- https访问端口-->
<web_admin bind="https://0.0.0.0:61681"/>
<!-- 连接者,tcp连接端口,最大连接数为2000-->
<connector id="tcp" bind="tcp://0.0.0.0:61613" connection_limit="2000"/>
<!-- 连接者,tls连接端口,最大连接数为2000-->
<connector id="tls" bind="tls://0.0.0.0:61614" connection_limit="2000"/>
<!-- 连接者,Websocket连接端口,最大连接数为2000-->
<connector id="ws" bind="ws://0.0.0.0:61623" connection_limit="2000"/>
<!-- 连接者,Secure Websocket连接端口,最大连接数为2000-->
<connector id="wss" bind="wss://0.0.0.0:61624" connection_limit="2000"/>
- log4j.properties:Apache的日志库配置
- groups.properties:允许有多个用户
<!--默认只有admin,在后面增加了lalala,然后lalala用户也可以登陆了,当然需要在users.properties中配置lalala的密码才能使用-->
admins=admin|lalala
- login.conf:配置一些登陆校验配置,比如黑名单白名单、ssl证书、用户名检查文件、用户组等
- keystore:存储密钥证书,在SSL时使用
- black-list:黑名单ip列表