一、介绍 最近几天都在搭建MQTT服务器,几天前搭建好了一个 Apache-Apollo的 MQTT 服务器,当我们在管理我们的主题的时候,发现主题的名称的斜杠(/)变成了点号(.),正好我在调试程序,在调用的时候出现了一些问题,各种解决办法都想了,还是没有解决,于是就向重新搭建一个 MQTT 服务器,试试客户端调用还会出现以前那个问题吗?(其实,那个问题,是我发布消息的时候,主题选择有误导致的,具体就不说了)。 有很多网友推荐,让我使用 Mosquitto 做 MQTT 服务器,这次我就听取大家的建议,于是我就搭建了一个 Mosquitto 的MQTT 服务器。测试程序也很顺利,当然有掌握了一种新的 MQTT 服务器的搭建方法,也不错。 我的搭建环境如下: 云平台:阿里云平台 操作系统:Windows Server 2022 Datacenter 机器内存:8.00 GB (7.73 GB 可用) 系统类型:64 位操作系统, 基于 x64 的处理器 MQTT服务器:Mosquitto 2.0.15 MQTT客户端:MQTT.fx二、实操步骤 1、下载地址:https://mosquitto.org/download/ 2、安装 2.1、下载完成后,双击安装文件“mosquitto-2.0.15-install-windows-x64.exe”进行安装。 2.2、安装很简单,直接下一步。 点击 “next” 点击 “next” 选择安装路径"D:\Program Files\mosquitto"进行安装,点击"Install",完成安装。 注意事项:之前的版本需要拷贝Openssl依赖库的文件"libssl-1_1-x64.dll"、“libcrypto-1_1-x64.dll”,现在安装完后自带该文件,不再需要拷贝。 3、安装为Windows 服务 3.1、软件安装完成后,会自动生成服务"Mosquitto Broker",需要手动点击“启动”服务后,mosquitto才会正常运行。Mosquitto服务默认占用1883端口。 3.2、查看运行的 Windows 服务。 3.3、开启服务,系统启动,自动运行。 4、测试服务。 4.1、通过cmd命令,切换到mosquitto安装目录,打开第一个命令窗口,订阅主题。 执行命令:mosquitto_sub.exe -v -t topicMyMQTT -v 打印调试信息。 -t 指定主题名称。 4.2、发布主题及消息 执行命令:mosquitto_pub.exe -t topicMyMQTT -m testMessage -t 指定主题名称 -m 要发送的消息内容 4.3、打印消息 4.4、设置密码 命令:mosquitto_passwd.exe -b pwfile/pwfile.example admin patrick******
pwfile/pwfile.example:这个是密码文件的地址,写的是相对目录,必须在 mosquitto.conf 配置文件,我也增加了一个目录。 password_file D:\Program Files\mosquitto\pwfile\pwfile.example
5、文件作用 mosquitto.conf mosquitto服务器配置文件 mosquitto.exe 用来开启broker mosquitto_passwd.exe 用来设置用户的账号与密码 mosquitto_pub.exe 用来发布消息 mosquitto_sub.exe 用来订阅消息 pwfile.example 通过mosquitto_passwd来存储用户账号密码的文件 6、配置系统环境变量 此电脑(右键)–>属性–>高级系统设置–>环境变量–>编辑Path变量 7、打开配置文件mosquitto.conf更改默认配置 # 设置允许匿名连接,则省略第6步;如果禁止匿名连接,则需要配置账号、密码连接,则配置第6步 allow_anonymous true # 密码文件路径,禁止匿名连接配置,允许匿名则不用配置 password_file D:\Program Files\mosquitto\pwfile.example(必须写完整名称:pwfile.example,包括完整路径和后缀名,否则服务起不来) #权限配置 acl_file D:\Program Files\mosquitto\aclfile.example(必须写完整名称:pwfile.example,包括完整路径和后缀名,否则服务起不来) # mqtt 协议配置,分为ipv4和ipv6两种,当前可以只配置启用一种 listener 1883 0.0.0.0 socket_domain ipv4 protocol mqtt listener 1883 : : socket_domain ipv6 protocol mqtt # webscoket 协议配置,分为ipv4和ipv6两种,当前可以只配置启用一种 listener 1884 0.0.0.0 protocol websockets socket_domain ipv4 listener 1884 : : protocol websockets socket_domain ipv4 # 允许的最大连接数,-1表示没有限制 max_connections -1 #配置绑定地址,可以外界访问 bind_address 0.0.0.0 # 开启持久化 persistence true # 持久化目录 persistence_location D:\Program Files\mosquitto\persistence(当前是目录结构) # 日志输出文件 log_dest file D:\Program Files\mosquitto\log\mosquitto.log(完整路径、文件名和扩展名) # 权限划分 acl_file D:\Program Files\mosquitto\aclfile\aclfile.example(完整路径、文件名和扩展名) 8、配置mosquitto账号密码,输入密码界面不会显示密码,直接输入回车即可,需要连续输入两次。保证pwfile.example的路径和上面的配置一致。创建成功后pwfile.example会出现刚刚添加的用户信息。Win+R键输入cmd并进入mosquitto根目录输入: mosquitto_passwd -b pwfile/pwfile.example username #然后输入及确认密码 # 使用-c 参数会导致清空密码文件,重新插入用户 mosquitto_passwd -c pwfile/pwfile.example 用户名 # 不使用-c 表示追加用户,不影响旧用户 mosquitto_passwd -c pwfile/pwfile.example 用户名 -c 是创建一个新的文件,只保存一个用户 -b 在文件中新增一个用户在最后 -D 从文件中删除指定用户 -H密码加密方式 9、重启mosquitto服务,配置文件的修改才能生效 此电脑(右键)–>管理–>服务和应用程序–>服务–>启动Mosquitto Broker,或者在 cmd 命令行中直接输入命令:services.msc,可以直接打开服务管理器。
#
权限配置
10、mosquitto服务器使用 10.1、启动服务器 命令:mosquitto.exe -c mosquitto.conf -v 10.2、订阅者 命令:mosquitto_sub.exe -t "test" -c 指定客户端clean_session是否保存。 -d 打印debug信息 -h 指定要连接的域名 默认为localhost -i 指定客户端clientid -I 指定clientId前缀 -k keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒. -q 指定希望接收到QoS为什么的消息 默认QoS为0 -R 不显示陈旧的消息 -t 订阅topic -v 打印消息 --will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用 --will-qos Will的QoS值。该参数需要与--will-topic一起使用 --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使>用 --will-topic 用户发送Will消息的topic 10.3、 发布者 命令:mosquitto_pub.exe -t "test" -m "测试信息" -d 打印debug信息 -f 将指定文件的内容作为发送消息的内容 -h 指定要连接的域名 默认为localhost -i 指定客户端clientid,默认为附加进程ID的mosquitto_pub_ -I 指定clientId前缀 -m 消息内容 -n 发送一个空(null)消息 -p 连接端口号 -q 指定QoS的值(0,1,2) -t 指定topic -u 用户名 -P 用户密码 -V 指定MQTT协议版本 --will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用 --will-qos Will的QoS值。该参数需要与--will-topic一起使用 --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使 用 --will-topic 用户发送Will消息的topic 11、常见问题: 11.1、 查找被占用的端口 # 查找使用的端口 netstat -ano # 查找指定的端口 netstat -ano |findstr 1883 11.2、停止端口 # 停用端口 taskkill -PID 8984 -F # 查看占用此端口的进程,在任务管理器中强制结束 tasklist|findstr 8984三、总结 好了,今天就写到这里了,用的多了,也能有一些自己的总结。其实,我们做 IOT 开发,和服务器关系不大,编码也不很多,现在有很多开源的组件可以免费使用,一句话,服务器我们只负责搭建,根本不用编码,主要负责的是客户端的编码和实现。当然,经历过,也就知道了,否则,还是云里雾里的。不忘初心,继续努力,老天不会辜负努力的人。
原文链接:https://www.cnblogs.com/PatrickLiu/p/17564839.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728