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