admin 管理员组文章数量: 887018
接前一篇文章:Windows系统下安装Mosquitto的步骤(2)
本文内容参考:
Windows10上安装Mosquitto的步骤(win10、win11 安装mqtt) - IPS99技术分享
MQTT:windows环境下配置MQTT服务器(mosquitto)_windows mosquitto-CSDN博客
特此致谢!
上一回讲解了Mosquitto的下载和安装过程,本回讲解一下Mosquitto的配置。
四、Mosquitto配置
Mosquitto安装完后,其安装路径(本例是“C:\Program Files\mosquitto”)下的内容为:
其中的关键文件说明如下:
1. 设置Broker的IP和Port
(1)进入Mosquitto安装目录,会看到文件mosquitto.conf,如果不存在该文件,可创建。
从上图可以看到,mosquitto.conf文件是存在的。
(2)打开mosquitto.conf。
mosquitto.conf文件内容如下(文件较长,仅贴出仅开头部分):
# Config file for mosquitto
#
# See mosquitto.conf(5) for more information.
#
# Default values are shown, uncomment to change.
#
# Use the # character to indicate a comment, but only if it is the
# very first character on the line.
# =================================================================
# General configuration
# =================================================================
# Use per listener security settings.
#
# It is recommended this option be set before any other options.
#
# If this option is set to true, then all authentication and access control
# options are controlled on a per listener basis. The following options are
# affected:
#
# acl_file
# allow_anonymous
# allow_zero_length_clientid
# auto_id_prefix
# password_file
# plugin
# plugin_opt_*
# psk_file
#
# Note that if set to true, then a durable client (i.e. with clean session set
# to false) that has disconnected will use the ACL settings defined for the
# listener that it was most recently connected to.
#
# The default behaviour is for this to be set to false, which maintains the
# setting behaviour from previous versions of mosquitto.
#per_listener_settings false
# This option controls whether a client is allowed to connect with a zero
# length client id or not. This option only affects clients using MQTT v3.1.1
# and later. If set to false, clients connecting with a zero length client id
# are disconnected. If set to true, clients will be allocated a client id by
# the broker. This means it is only useful for clients with clean session set
# to true.
#allow_zero_length_clientid true
# If allow_zero_length_clientid is true, this option allows you to set a prefix
# to automatically generated client ids to aid visibility in logs.
# Defaults to 'auto-'
#auto_id_prefix auto-
# This option affects the scenario when a client subscribes to a topic that has
# retained messages. It is possible that the client that published the retained
# message to the topic had access at the time they published, but that access
# has been subsequently removed. If check_retain_source is set to true, the
# default, the source of a retained message will be checked for access rights
# before it is republished. When set to false, no check will be made and the
# retained message will always be published. This affects all listeners.
#check_retain_source true
# QoS 1 and 2 messages will be allowed inflight per client until this limit
# is exceeded. Defaults to 0. (No maximum)
# See also max_inflight_messages
#max_inflight_bytes 0
# The maximum number of QoS 1 and 2 messages currently inflight per
# client.
# This includes messages that are partway through handshakes and
# those that are being retried. Defaults to 20. Set to 0 for no
# maximum. Setting to 1 will guarantee in-order delivery of QoS 1
# and 2 messages.
#max_inflight_messages 20
……
(3)在文件尾部追加行。
追加内容如下:
listener 1883 127.0.0.1
其中:
1883 —— 端口。
127.0.0.1 —— IP,可根据个人需求设置具体的IP和端口。
注:此步骤可以跳过,不必执行。
2. 配置是否允许匿名登录
- Mosquitto若要支持客户端无账号密码验证连接,需要配置mosquitto.conf。打开mosquitto.conf,在尾部(其它位置新起一行也可,下同)添加allow_anonymous true,保存。重启Mosquitto broker服务使配置生效即可。
- 如果想让客户端必须经过账号密码验证,则需要打开mosquitto.conf,在尾部添加allow_anonymous false。这只是基础的一步,接下来还需要进行其它配置。
注:在笔者的电脑环境下,由于权限问题,不能直接修改,需要拷贝 -> 修改 -> 拷回步骤。
3. 插入新用户名和密码
(1)新增用户
以管理员身份打开Windows PowerShell:
切换到mosquitto安装目录:
注:powershell中,建议所有的路径使用单引号包裹,尤其路径中含有空格的情况,这样兼容性会更好。
假设要添加的用户名是user1,密码是1234。则执行以下命令:
.\mosquitto_passwd.exe -c .\pwfile.example user1
命令说明:
- user1是要添加的账户名,放到命令的末尾。
- .\pwfile.example的意思是指把账户信息写入到文件pwfile.example。
- -c的意思是如果.\pwfile.example不为空,即已存在账户信息,那么就把原来的账户信息抹除掉,即覆盖(override)pwfile.example。
- 如需追加用户,则不使用-c即可。
输入密码:1234,按回车。
再次输入密码1234,回车。
这样新账户就添加完成了。运行完此命令后,mosquitto现在只存在一个账户user1。
如果还想添加其它账号,则如上所说,使用不带-c参数的命令,如下:
此时,当前目录下的pwfile.example文件内容如下:
user1:$7$101$bLfVOMZSIOcl662n$xDdzxBl/YxwcPNjwDwTQy/MQ1/mAn6Z6KckjCjZ0NmqxbQLYlHFIn7IdukoZocQAg72RggNo6lH81ZxtKTQPwQ==
user2:$7$101$PqfrToGUbRJA2FcX$HT55SWpzvsZzekiS+YoAOJiBP08VJMu8s8eS8G8ECmKI1gCocyP2A3ksdYonGHvOT4Zqea2M9D7Dlnd1kqeSFA==
能否添加相同用户名的账户呢?来看一下:
看来也是可以的,不过应该是相当于重置已有账户(此处是user2)的密码了。
我们还是只保留user1一个账户。再次执行一开始的命令,用户名密码还是user1和1234。
此时,pwfile.example文件内容如下:
user1:$7$101$O41TETGF2CSCSF/j$Hh/WOJ3iMKHbCR60DJboDcOgCbWl2Bc6Dwm+069zxzjsCCgGI34FlaSYr/FM4IpJqmS8pgH7FBEtd/sngXKHFw==
(2)重启服务mosquitto broker
修改完配置文件,需要重启服务生效。
这里顺带说明一下如何让Broker服务在Windows下开机自启。步骤如下图所示:
五、Mosquitto测试
1. 开启第1个Windows PowerShell,启动Mosquitto
在“C:\Program Files\mosquitto”下,打开一个Windows PowerShell,如下所示:
在命令行中执行以下命令:
mosquitto.exe -c mosquitto.conf
实际命令及结果如下:
按照Windows PowerShell能接受的格式重新输入:
.\mosquitto.exe -c .\mosquitto.conf
这次结果如下:
2. 开启第2个Windows PowerShell,订阅消息
仍然使用相同方法,再打开一个Windows PowerShell。
在命令行中执行以下命令:
.\mosquitto_sub.exe -u user1 -P 1234 -t 'user/topic' -v
注:这里的user1和1234就是前述步骤中添加的用户名和密码。
实际命令及结果如下:
3. 开启第3个Windows PowerShell,发布消息
仍然使用相同方法,再打开一个Windows PowerShell。
在命令行中执行以下命令:
.\mosquitto_pub.exe -u user1 -P 1234 -t 'user/topic' -m 'mqtt测试'
实际命令及结果如下:
此时,第2个订阅窗口会收到来自第3个发布窗口发布的消息。如下所示:
如果topic不一致,会出现什么情况?试一下。在第3个窗口中仍然输入之前的命令,只是把topic改一下。如下所示:
此时,第2个窗口中不会收到第3个窗口中的消息。
遇到的一处问题
经过以上步骤后,功能基本上正常了,说明Mosquitto环境已经配置好了。但是,在此笔者遇到了一个问题,在修改了mosquitto.conf文件,加入
allow_anonymous false
并重启服务后或者直接通过命令行启动服务后
.\mosquitto.exe -c .\mosquitto.conf
仍然可以无需用户名和密码直接发布消息,也就是说第3个窗口中不是发
.\mosquitto_pub.exe -u abcd -P 1234 -t 'user/topic' -m 'mqtt测试'
而是发
.\mosquitto_pub.exe -t 'user/topic' -m 'mqtt测试'
第2个订阅窗口中仍然能收到消息。
在此就先不深究这个问题了,如果有相关经验的人请解答一下,或者以后自行再解决吧。
版权声明:本文标题:Windows系统下安装Mosquitto的步骤(3) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729681394h1338850.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论