MQTT再学习 -- 搭建MQTT服务器及测试

转载自:https://blog.csdn.net/qq_29350001/article/details/76680646

最近在搞 PM2.5 采集,需要用到 MQTT 传输协议。协议部分看了几天的,讲的七七八八。本身在 intel 上有 写好的MQTT 的源码,现在的工作其实也就是移植到单片机上或者DM368板卡上。不过,对于之前没有接触过的我来说,还是从头开始,搭建服务器及测试一下为好。

MQTT服务器有好多种,参看:Servers/Brokers 

Apache-Apollo:一个代理服务器,在ActiveMQ基础上发展而来,可以支持STOMP、AMQP、MQTT、Openwire、SSL和WebSockets等多种协议,并且Apollo提供后台管理页面,方便开发者管理和调试。
EMQ:EMQ 2.0,号称百万级开源MQTT消息服务器,基于Erlang/OTP语言平台开发,支持大规模连接和分布式集群,发布订阅模式的开源MQTT消息服务器。
HiveMQ:一个企业级的MQTT代理,主要用于企业和新兴的机器到机器M2M通讯和内部传输,最大程度的满足可伸缩性、易管理和安全特性,提供免费的个人版。HiveMQ提供了开源的插件开发包。
Mosquitto:一款实现了消息推送协议MQTT v3.1的开源消息代理软件,提供轻量级的、支持可发布/可订阅的消息推送模式。


这篇文章我们只讲两种,一种是 Mosquitto、另一种是 Apollo,以及它们在 linux 下和 Windows 下的安装。

我们本篇都会来一一做讲解。

参看:【MQTT】在Ubuntu下搭建MQTT服务器

一、Ubuntu 下 MQTT 服务器搭建之Apollo

(1) 首先要搞清楚什么是 Apollo 

参看:ActiveMQ's next generation of messaging

ActiveMQ Apollo is a faster, more reliable, easier to maintain messaging broker built from the foundations of the original ActiveMQ. It accomplishes this using a radically different threading and message dispatching architecture. Like ActiveMQ, Apollo is a multi-protocol broker and supports STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets.

翻译一下:

ActiveMQ Apollo是从原始ActiveMQ的基础构建的更快,更可靠,更易于维护的消息代理。 它使用完全不同的线程和消息调度架构来实现。 像ActiveMQ一样,Apollo是一个多协议代理,支持STOMP,AMQP,MQTT,Openwire,SSL和WebSockets。


看到没,有支持 MQTT  

下载:Download it today!



(2)安装

先解压

  1. # sudo tar -zxvf apache-apollo-1.7.1-unix-distro.tar.gz   

查看 bin/apollp.cmd

[html] view plain copy
  1. # cat apollo.cmd   
  2. @REM  
  3. @REM Licensed to the Apache Software Foundation (ASF) under one or more  
  4. @REM contributor license agreements.  See the NOTICE file distributed with  
  5. @REM this work for additional information regarding copyright ownership.  
  6. @REM The ASF licenses this file to You under the Apache License, Version 2.0  
  7. @REM (the "License"); you may not use this file except in compliance with  
  8. @REM the License.  You may obtain a copy of the License at  
  9. @REM  
  10. @REM      http://www.apache.org/licenses/LICENSE-2.0  
  11. @REM  
  12. @REM Unless required by applicable law or agreed to in writing, software  
  13. @REM distributed under the License is distributed on an "AS IS" BASIS,  
  14. @REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  15. @REM See the License for the specific language governing permissions and  
  16. @REM limitations under the License.  
  17. @REM  
  18. @echo off  
  19.   
  20. setlocal  
  21.   
  22. if NOT "%APOLLO_HOME%"=="" goto CHECK_APOLLO_HOME  
  23. PUSHD .  
  24. CD %~dp0..  
  25. set APOLLO_HOME=%CD%  
  26. POPD  
  27.   
  28. :CHECK_APOLLO_HOME  
  29. if exist "%APOLLO_HOME%\bin\apollo.cmd" goto CHECK_JAVA  
  30.   
  31. :NO_HOME  
  32. echo APOLLO_HOME environment variable is set incorrectly. Please set APOLLO_HOME.  
  33. goto END  
  34.   
  35. :CHECK_JAVA  
  36. set _JAVACMD=%JAVACMD%  
  37.   
  38. if "%JAVA_HOME%" == "" goto NO_JAVA_HOME  
  39. if not exist "%JAVA_HOME%\bin\java.exe" goto NO_JAVA_HOME  
  40. if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe  
  41. goto RUN_JAVA  
  42.   
  43. :NO_JAVA_HOME  
  44. if "%_JAVACMD%" == "" set _JAVACMD=java.exe  
  45. echo.  
  46. echo Warning: JAVA_HOME environment variable is not set.  
  47. echo.  
  48.   
  49. :RUN_JAVA  
  50.   
  51. set CLASSPATH=%APOLLO_HOME%\lib\apollo-boot.jar  
  52.   
  53. set BOOTDIRS=%APOLLO_HOME%\lib  
  54. if NOT "x%APOLLO_BASE%" == "x" set BOOTDIRS=%APOLLO_BASE%\lib;%BOOTDIRS%  
  55.   
  56. if "%JVM_FLAGS%" == "" set JVM_FLAGS=-server -Xmx1G -XX:-UseBiasedLocking  
  57.   
  58. if "%APOLLO_ASSERTIONS%"=="false" goto noAPOLLO_ASSERTIONS  
  59.   set JVM_FLAGS=-ea %JVM_FLAGS%  
  60. :noAPOLLO_ASSERTIONS  
  61.   
  62. if "x%APOLLO_OPTS%" == "x" goto noAPOLLO_OPTS  
  63.   set JVM_FLAGS=%JVM_FLAGS% %APOLLO_OPTS%  
  64. :noAPOLLO_OPTS  
  65.   
  66. if "x%APOLLO_DEBUG%" == "x" goto noDEBUG  
  67.   set JVM_FLAGS=%JVM_FLAGS% -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005  
  68. :noDEBUG  
  69.   
  70. if "x%APOLLO_PROFILE%" == "x" goto noPROFILE  
  71.   set JVM_FLAGS=-agentlib:yjpagent %JVM_FLAGS%  
  72. :noPROFILE  
  73.   
  74. if "%JMX_OPTS%" == "" set JMX_OPTS=-Dcom.sun.management.jmxremote  
  75. rem set JMX_OPTS=-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false  
  76. set JVM_FLAGS=%JVM_FLAGS% %JMX_OPTS%  
  77.   
  78. set JVM_FLAGS=%JVM_FLAGS% -Dapollo.home="%APOLLO_HOME%"  
  79. if NOT "x%APOLLO_BASE%" == "x" set JVM_FLAGS=%JVM_FLAGS% -Dapollo.base="%APOLLO_BASE%"  
  80. set JVM_FLAGS=%JVM_FLAGS% -classpath "%CLASSPATH%"  
  81.   
  82. "%_JAVACMD%" %JVM_FLAGS% org.apache.activemq.apollo.boot.Apollo "%BOOTDIRS%" org.apache.activemq.apollo.cli.Apollo %*  
  83.   
  84. :END  
  85. endlocal  
  86. GOTO :EOF  
  87.   
  88. :EOF  
由于搭建 Apollo 环境变量需要有 JAVA_HOME,这个时候需要安装 JDK

安装 JDK



从上图可以看到,这个Linux版本有 x86 和 x64 等版本。如果查看你的 Ubuntu 是什么版本呢?
方法一:getconf LONG_BIT
在linux终端输入 getconf LONG_BIT 命令
如果是32位机器,则结果为32
  1. [root@localhost ~]# getconf LONG_BIT    
  2. 32    
如果是64位机器,则结果为64
  1. [root@localhost ~]# getconf LONG_BIT    
  2. 64    
方法二:uname -a
如果是64位机器,会输出x86_64

  1. [chenzhou@testweb01 ~]$ uname -a    
  2. Linux testweb01 2.6.18-308.4.1.el5 #1 SMP Tue Apr 17 17:08:00 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux    
可以看到,uname-a执行后的结果中输出了x86_64,说明该机器是64位的,否则代表该机器是32位的
  1. [root@localhost ~]# uname -a    
  2. Linux localhost.localdomain 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux    
方法三:file /sbin/init 或者 file /bin/ls
示例:32位机器
file /sbin/init

  1. [root@localhost ~]# file /sbin/init    
  2. /sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped    
file /bin/ls
  1. [root@localhost ~]# file /bin/ls    
  2. /bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped    
示例:64位机器
file /sbin/init

  1. [chenzhou@testweb01 ~]$ file /sbin/init    
  2. /sbin/init: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped    
file /bin/ls
  1. [chenzhou@testweb01 ~]$ file /bin/ls    
  2. /bin/ls: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped    
可以通过命令结果中的64-bit或者32-bit来判断该机器是64位还是32位

最后如下经过测试,我的Ubuntu是32位的,下载  jdk-8u144-linux-i586.tar.gz
  1. # uname -a  
  2. Linux ubuntu 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux  
  3.   
  4. #getconf LONG_BIT    
  5. 32  

通过终端在/usr/local目录下新建java文件夹,命令行:
  1. sudo mkdir /usr/local/java  
然后进入java目录,命令行:
  1. cd /usr/local/java  
解压压缩包:
  1. sudo tar xvf jdk-8u25-linux-x64.tar.gz  
设置jdk环境变量:
  1. # gedit /etc/profile  
  2. 在最后添加下面代码:  
  3.   
  4. export JAVA_HOME=/usr/local/java/jdk1.8.0_144  
  5. export JRE_HOME=${JAVA_HOME}/jre    
  6. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib    
  7. export PATH=${JAVA_HOME}/bin:$PATH  
  8.   
  9. 使用 source /etc/profile 使它立即生效  
检验是否安装成功:
  1. # java -version  
  2. java version "1.8.0_144"  
  3. Java(TM) SE Runtime Environment (build 1.8.0_144-b01)  
  4. Java HotSpot(TM) Client VM (build 25.144-b01, mixed mode)  

配置 Apollo

进入apache-apollo-1.7.1/bin目录
cd apache-apollo-1.7.1/bin/
输入 ./apollo 可以查看帮助
  1. # ./apollo   
  2. usage: apollo [--log <log_level>] <command> [<args>]  
  3.   
  4. The most commonly used apollo commands are:  
  5.     create           creates a new broker instance  
  6.     disk-benchmark   Benchmarks your disk's speed  
  7.     help             Display help information  
  8.     version          Displays the broker version  
  9.   
  10. See 'apollo help <command>' for more information on a specific command.  
创建一个Broker示例:/apollo create mybroker,MQTT服务器都是叫Broker。
  1. # ./apollo create mybroker  
  2. Creating apollo instance at: mybroker  
  3. Generating ssl keystore...  
  4.   
  5. You can now start the broker by executing:    
  6.   
  7.    "/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker" run  
  8.   
  9. Or you can setup the broker as system service and run it in the background:  
  10.   
  11.    sudo ln -s "/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker-service" /etc/init.d/  
  12.    /etc/init.d/apollo-broker-service start  
后面会有提示怎么启动服务器,以及创建一个service。
启动Apollo :
  1. # ./mybroker/bin/apollo-broker run  
  2.   
  3.     _____                .__  .__  
  4.    /  _  \ ______   ____ |  | |  |   ____  
  5.   /  /_\  \\____ \ /  _ \|  | |  |  /  _ \  
  6.  /    |    \  |_> >  <_> )  |_|  |_(  <_> )  
  7.  \____|__  /   __/ \____/|____/____/\____/  
  8.          \/|__|  Apache Apollo (1.7.1)  
  9.   
  10.   
  11. Loading configuration file '/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/etc/apollo.xml'.  
  12. INFO  | OS     : Linux 3.2.0-23-generic-pae (Ubuntu 12.04 LTS)  
  13. INFO  | JVM    : Java HotSpot(TM) Server VM 1.8.0_144 (Oracle Corporation)  
  14. INFO  | Apollo : 1.7.1 (at: /home/tarena/project/MQTT/apache-apollo-1.7.1)  
  15. INFO  | OS is restricting the open file limit to: 100000  
  16. INFO  | Accepting connections at: tcp://0.0.0.0:61613  
  17. INFO  | Accepting connections at: tls://0.0.0.0:61614  
  18. INFO  | Starting store: leveldb store at /home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/data  
  19. INFO  | Accepting connections at: ws://0.0.0.0:61623/  
  20. INFO  | Accepting connections at: wss://0.0.0.0:61624/  
  21. INFO  | Administration interface available at: https://127.0.0.1:61681/  
  22. INFO  | Administration interface available at: http://127.0.0.1:61680/  
之后查看打印信息即可知道MQTT要连接的端口和管理页面端口。

然后打开Ubuntu浏览器,输入 http://127.0.0.1:61680/ 或 https://127.0.0.1:61681/
即可进入 Apollo Console 窗口。


默认的登录id和密码是 admin password

二、Windows 下 MQTT 服务器搭建之Apollo

(1)下载 Apollo


(2)安装

解压得到如下文件。
这里需要注意了,解压 apache-apollo-1.7.1 所在文件夹名称不能有 中文或者空格, 后面会提到出现什么错误。

进入 apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin 文件夹
按住 shift键选择 apollo.cmd 再点击右键。选择 在此处打开命令窗口。


然后在 cmd 窗口执行 apollo.cmd。然后就可以看到发生错误。上面Ubuntu下安装时已经提到,还需要安装 JDK。

(3)安装 JDK


Windows 系统是多少位的,这个应该很清楚吧。查看 我的电脑->属性,查看有关计算机的基本信息。

我的电脑为 win 10 64位,下载并安装 jdk-8u144-windows-x64.exe
然后配置 JDK 环境变量
我的电脑->属性->高级系统设置->高级->环境变量


这部分我们之前将 FFmpeg 的Windows安装说明时有提到过的。可看到有用户变量和系统变量。
修改“用户变量”为当前用户使用,其他 Windows 用户不能够使用。如果要使每个用户都能够使用,你需要修改 "系统变量" 。

注意,不要够删除在变量中原来已有的内容。如果之前已存在变量,则在其之后用分号“;”分隔,然后添加。


我们只让当前用户可用,修改用户变量即可。
在用户环境变量中新建变量 JAVA_HOME,设置变量值 F:\Program Files\Java\jdk1.8.0_144

新建PATH,设置变量值%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

新建CLASSPATH,设置变量值.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar注意前面的.表示当前目录。然后点击“确定”按钮。

到此,配置完成。打开 cmd 测试一下配置是否成功。
输入java -version,显示版本java version "1.8.0_144",输入javac -version,也显示javac 1.8.0_144,说明JDK安装及环境变量配置成功。


然后接着上面来讲。 进入 apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin 文件夹
按住 shift键选择 apollo.cmd 再点击右键。选择 在此处打开命令窗口。
再次在 cmd 窗口执行 apollo.cmd,可以看到如下的信息,这就和 Ubuntu 下安装对上了。

(4)创建服务器实例

在 CMD 命令窗口输入 apollo create mybroker ,当然 mybroker 这个名字可以随便起。


然后查看 mybroker 可以发现里面包含有很多信息,其中etc\apollo.xml文件下是配置服务器信息的文件,etc\users.properties文件包含连接MQTT服务器时用到的用户名和密码,可以修改原始的admin=password,可以接着换行添加新的用户名密码。

bin:保存与该实例关联的执行脚本。
etc:保存实例配置文件
data:保存用于存储持久消息的数据文件
日志:保存旋转日志文件
tmp:保存在代理运行之间安全删除的临时文件

打开cmd,运行 apache-apollo-1.7.1\bin\mybroker\bin\apollo-broker.cmd run 开启服务器,如下图所示:


这里需要注意了,所在 apache-apollo-1.7.1 所在文件夹名称不能有 中文或者空格。因为我上面的是存放在 360安全浏览下载 这个目录下了。导致出现系统找不到指定的路径。


然后打开浏览器上,输入 http://127.0.0.1:61680/ 或 https://127.0.0.1:61681/
即可进入 Apollo Console 窗口。

默认的登录id和密码是 admin 和 password 

三、MQTT 客户端测试

Apollo 服务器安装已经讲完,接下来简单测试一下发布订阅。
这里面网上有 MQTT协议之Apache Apollo 安装使用 这种文章用的是 java,在Android上测试的。
这就不太适合我了,不懂 Android 蓝瘦香菇啊

再有一种是用 谷歌浏览器上的 扩展程序 mqttlens
首先添加该插件


点击 获取更多扩展程序


搜索 mqttlens ,最后添加至 CHROME


安装完成!!
下面进行测试
先运行 Apollo 服务器



然后启动 mqttlens 


然后点击 Connections+


出现下图,并 填写好相关的信息

然后就进入了,订阅发布界面

OK,到此结束

四、Ubuntu 下 MQTT 服务器搭建之Mosquitto

Mosquitto 是一款实现了消息推送协议MQTT v3.1的开源消息代理软件,提供轻量级的、支持可发布/可订阅的消息推送模式。现在我们开始搭建服务器。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值