mosquitto版本:2.0.18a、
排查前准备步骤:
1、打开mosquitto.conf文件,将allow_anonymous一行取消注释,改为allow_anonymous true;同时将其它所有行的开头以“#”起始;这么做是为了将该文档恢复至初始时的功能的同时允许匿名登录。这可以屏蔽加密通讯和密码登录等设置带来的干扰。
启动失败情况一:
服务启动时会有类似于“该服务在启动后停止”的提示。
可能的原因:
没有在mosquitto.conf文档中定义至少一个端口监听器。
解决方法:
1、在mosquitto.conf中找到行listener,并将前面的“#”去除后改为:
listener 1883
2、保存该配置文件后,进入mosquitto根目录,在该目录下打开控制台,输入:
mosquitto -c mosquitto.conf -v
这么做是为了应用刚才的设置并启动mosquitto broker。
3、观察效果。如果依旧提示该问题,第一种方法是,可以以管理员身份运行cmd,输入:
netstat -anb
或者:
netstat -ano | findstr 1883
观察是否存在占用该端口的应用程序或者正在请求的程序;如果存在可以考虑是否使用任务管理器之类结束正在占用该端口的程序,之后再次启动mosquitto服务;第二种方法是,寻找一个没被占用的端口x,并在mosquitto.conf中设置:
listener x
之后再次重复步骤2的操作,再行观察。
启动失败情况二:
点击mosquitto.exe闪退。这可能是错误的conf设置(这在文章开头可以先隔离这个问题),也可能是另一个情况:windows防火墙拒绝开放该端口。
解决方法:
这可以在windows控制面板->windows defender防火墙->高级设置->入栈规则,尝试对该程序建立新的允许规则。
另注:当遇到mqtt client无法访问到该服务器时也可尝试windows控制面板->windows defender防火墙->高级设置中允许该程序通过网络通信或者建立入站规则以允许一些特定的IP访问本服务器。
末注:
本文中提供的解决方案只是本人所尝试过成功的一些操作步骤,如有谬误恳请指正。至于启动失败的情况或有记忆不准确之可能,请阅者结合自身实际另行判断。
启动失败情况三:
服务启动时会有类似于“该服务在启动后停止”的提示。但这次的原因是来自于错误地设置mosquitto.conf中用户密码登录。
解决方法:
mosquitto.conf中字段password_file用来设置broker用以储存用户密码的文件。
应如此设置用户密码:
password_file 带文件后缀的密码文件的绝对路径(下简称“密码绝对路径”)
然后在mosquitto目录下启动控制台,输入以下指令来向该文件中写入密码:
mosquitto_passwd -c 密码绝对路径 用户名
-c会将原来文件内的用户密码覆盖。如若在已有用户密码基础上添加新的用户条目,则在上面指令的基础上去掉-c即可。
最后重新应用设置并启动服务器;如服务器已运行,则先将其停止。
注:如果只需要用户密码登录,则可顺便启用allow_anonymous字段,使其变为:
allow_anonymous false
如此可禁止匿名访问broker。