大家好,又见面了,我是你们的朋友全栈君。
MQTT服务器部署
现在物联网常用的通信方式有哪些?RF433/315M、蓝牙、Zigbee、wifi、以太网等等,通信协议也按不同功能分了许多种,例如TCP、MQTT等,具体可到https://blog.csdn.net/sinat_36098122/article/details/80930168 研究。我当前用的比较多的是MQTT协议,它被较多的用来需要省电的设备通信上,采用发布/订阅的形式传输消息,具体可参考https://www.cnblogs.com/skullboyer/p/9085210.html。 要使用MQTT通信,就少不了MQTT服务器,它是消息传送的中转站(代理)。也就是说MQTT服务器并不存储消息,消息的发布与接收都由客户端完成。我主要写一下目前也是较流行的两者MQTT服务器的搭建:EMQ和Mosquitto。这两种服务器都是开源的,这里写的是部署在windows服务器上的方法(没办法菜鸟只能搞win,以后再玩玩Linux)。
一、EMQ搭建
1,下载EMQ。直接到官网上下,https://www.emqx.io/cn/downloads。EMQ是中国人搞的一个开源框架,基于ErLang语言开发的服务器框架(这个语言之前我也没听说过,没办法只能硬着头皮搞)。其他平台的部署也可参照官网的文档。 选择EMQ X Broker下载,这里选择的是最新的版本,3.0之后的版本安装文件是emqx,之前的版本是emqqt,名字稍有不同,安装过程一样,但它里面的配置有一些不同,这些后面再讲。
2,安装EMQ,这里要注意的是版本问题,3.0版本后如果安装出现问题,请先安装Erlang / OTP R21 ,具体安装ErLang的方法在这里我就不多赘述,可自行问度娘。 首先解压文件到emqx文件夹。打开cmd命令窗口,cd到bin路径下,接着输入emqx start(emqx是bin里面的执行文件),没有报错即可:
接着再次输入emqx_ctl status检查安装(记得cd 回bin目录),显示正在运行:
3,控制台 EMQ提供了web的控制后台,默认是18083端口,打开浏览器输入地址 http://127.0.0.1:18083,默认用户名 admin,默认密码public。可以看到EMQ的Dashboard界面(不习惯英文界面可以在Settings里面更改设置)。 控制台主要是可以看到客户端的一些连接状态,如连接数、客户端ID、订阅的消息、订阅的消息数、发布的消息及发布的消息数等等,还可以控制插件的运行。
如果想要更改web登录密码或添加用户(注意这里添加的是web管理用户),可以在Users设置里面添加。
EMQ默认设置了一些端口,如18083就是Dashboard,还有些就是:1883(MQTT 协议端口),这个是mqtt客户端连接服务器时使用的端口;8080(HTTP API 端口),这个也比较重要,在修改API时用到;8883(MQTT/SSL 端口);8083(MQTT/WebSocket 端口)。具体各部分端口的使用可参照官方文档https://docs.emqx.io/broker/v3/cn/guide.html
4,客户端连接 服务器初步搭建好了,就可以试试连接了。我用到的是MQTTBox客户端软件,这个是默认路径安装的,其它客户端也都行。下载地址http://workswithweb.com/mqttbox.html
接着测试连接服务器,点击Create MQTT Client创建一个连接,转到设置界面:
可以看到有许多的参数设置,这里的话只需填写MQTT Client Name(客户端名)、Protocol(通信方式)、Host(mqtt服务器地址,内网连接的话填127.0.0.1:1883即可,外网连接需要填写你自己的服务器公网地址)、Will – QoS(mqtt的传输方式,方式0—2)、Username和Password(用户名和密码)这里可填可不填,因为现在还没有给mqtt服务器添加用户连接认证,后面再讲怎么配置。
设置完后点击保存,状态图标显示绿色则表示连接成功。
左边是Pub发布消息界面,右边是订阅主题界面(当然你也可以多开一个客户端分别进行主题发布和订阅)。 首先先进行主题订阅,填写要订阅的主题名(具体主题名规则参考MQTT协议文档),还有mqtt的通信方式:
点击SUB订阅即可看到主题为‘zzz’的界面。 然后在发布对应的‘zzz’主题,点击pub发送消息。(注意发布跟订阅的通信方式要选择一样的才能进行消息传递)
可以看到订阅界面收到了订阅的消息。至此EMQ的初步搭建就完成,接下来就是对配置进行一些修改。例如添加安全认证连接、修改默认的端口等。
5,配置修改 (1)设置用户认证连接 当建立好mqtt服务器之后,默认是不开启连接认证,这是不安全的,所以我们要添加认证连接。认证方式有ClientId 认证、用户名、密码认证、MySQL 认证/访问控制等等,并且这些功能都可以在web管理界面的插件中开启(修改配置属性需在文件中修改),这里写的是用户名认证。 首先关闭匿名登录功能,打开emqx/etc文件夹,然后打开emqx.conf文件,!!!这里有一点注意的,windows操作系统用系统自带的记事本或其他自带的编辑器打开会出问题(这也是我遇到的一个坑,如果没有问题,当我没说),可以选择用Notepad 打开,找到allow_anonymous = true这里,将true改为false,即关闭匿名登录。(这里还是建议按我说的做,否则出错就要重新替换掉这个.conf文件)
修改完后关闭保存。接着打开cmd命令,cd 到bin目录,输入emqx stop关闭服务器,然后在emqx start打开服务器(每次修改完配置好都要重启服务器才能生效)。此时可以查看之前客户端连接的状态,可以看到已经断开了连接,则设置成功。
接着设置用户和密码,这里直接修改配置文件不行,这是因为EMQ3.0之后把许多的插件设置放到了管理监控API (REST API),REST API通过URL访问,地址:127.0.0.1:8080/api/v3/。这里的话给大家推荐一款网页访问工具Postman(老问题,安装自行度娘哈哈),通过Postman来对REST API进行操作。
API后台需要密码登录,所以操作之前先进入web管理界面,点击Applications,点击 添加用户,输入AppName保存。
创建完之后view查看,可以看到有我们所需的ID和密码(注意这个APP功能必须开启它,否则rest api后台无法登陆)
选择Authorization,在Type下拉列表中选择Basic Auth。然后用户名跟密码就填写刚刚创建的AppID和Appsecrat(复制过去即可),最后点击send访问。
可以看到Body里面返回了一堆信息,全都是EMQ的API信息,有用的信息就是API名‘name’以及访问方式‘method’跟路径‘path’。
成功返回信息后就开始设置我们需要的用户名密码设置,首先先在web管理界面打开插件emqx_auth_usernam,然后在Postman地址栏中填写http://127.0.0.1:8080/api/v3/auth_username, 点击Body,选择raw,输入用户名和密码,选择访问方式为POST,点击Send访问。
添加成功可以在下面看到返回code:0。
改变访问方式为GET,点击send就可以看到刚刚添加的用户。
再回到MQTT客户端,在设置里面添加你创建的用户名和密码保存,可以看到客户端又重新连接到MQTT服务器。至此MQTT服务器添加用户认证连接全部设置完。
6,其它配置修改 3.0版本开始EMQ X配置文件主要包括: etc/emqx.conf(EMQ X 消息服务器配置文件)、etc/acl.conf(EMQ X 默认ACL规则配置文件)、etc/plugins/*.conf(EMQ X 各类插件配置文件),其它配置修改包括端口修改、插件等等这里不做叙述,可参考官方的配置文档: https://docs.emqx.io/broker/v3/cn/
至此EMQ的mqtt服务器windows部署就告一段落,如有错误,欢迎指点。
——————————————————分界线—————————————————
二,Mosquitto部署 1,Mosquitto安装: Mosquitto是基于C语言实现的一种MQTT代理,这是一个轻量级的代理器,所以整体部署难度不大,也支持多种平台,这里我就还是选择的是windows上的部署。先说一下安装前提,Mosquitto的安装需要java环境,所以还是那句老话(度娘哈哈)。Mosquitto下载地址:https://mosquitto.org/download/,根据自己系统选择下载。
下载完成后直接打开运行,直接按照默认操作即可,可以自己选择安装目录(建议安装目录路径名不要有空格,否则后续安装完后配置时可能会报错),安装过程没有报错即可,如果报错,多半是java没有配置好,从头就行。
安装完后直接打开windows服务,找到Mosquitto Broker,启动mosquitto服务
现在mosquitto代理就安装好了,贼简单是吧。
2.mosquitto配置 Mosquitto没有像EMQ那样的管理界面(毕竟是轻量级的嘛),它实现了较基本的mqtt服务器功能,当然这些也都够我们用。配置文件位于安装目录下的mosquitto.conf文件中,默认情况下用默认配置服务器就可以工作,连接端口号是1883。
3,添加用户登录验证 打开mosquitto.conf文件,在文件中加入以下文本(这里只有初次创建mosquitto的需要添加)
代码语言:javascript复制allow_anonymous false
password_file /mqtt/mosquitto/pwfile.example
allow_anonymous false指的是设置不允许匿名登录
/mosquitto/pwfile.example 是设置账户密码文件的位置,根据你的安装目录写,如我的安装路径是C: mosquitto
修改完后重启mosquitto服务,cmd到安装目录输入
mosquitto_passwd -c /mqtt/mosquitto/pwfile.example zzz
会有两次密码输入(密码不显示),命令中 –c 指的是清空之前所有用户在创建一个,可以不填写。 设置好用户密码之后用MQTT客户端连接
到此两种MQTT服务器的搭建就都可以搭建。
(第一篇博客完成,有一丢丢激动哈哈) ——————————————————————————————————————
(本文属个人经验杂谈,转载请注明出处,文章若有侵权字段,联系本人侵删。)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140206.html原文链接:https://javaforall.cn