Windows环境下安装配置Mosquitto服务及入门操做介绍

https://www.cnblogs.com/dissun/p/10505007.htmlhtml

关键字:在windows安装mosquitto,在mosquitto中配置日志,在mosquitto中配置用户帐号密码

关于Mosquitto配置的资料网上仍是有几篇的,可是看来看去,基本上都是基于Linux。基于Window的百里挑一,看上去貌似配置的东西相差不大,实操过程当中真的烦透了,配置就是不成功,此次把本身实践过程当中的东西记录一下,分享出来。linux

 

1、概念梳理
一、Mosquitto是一款实现了消息推送协议MQTT 3.1的开源消息代理软件,提供轻量级的、支持可订阅/可发布的消息推送模式,是设备与设备之间的短消息通讯变得简单,普遍应用于低功耗传感器、手机(app消息推送是场景之一)、嵌入式电脑、微型控制器等移动设备。
二、那什么是MQTT,他的英文全称Message Queuing Telemetry Transport,翻译过来就是“消息队列遥测传输”,是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工做在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络情况糟糕的状况下而设计的发布/订阅型消息协议。
目前支持MQTT的服务器中间件有EMQTT、Mosquitto、Apollo。本章讲的就是Mosquitto。
三、MQTT的协议内容有不少,其中一个必定要知道,就是“消息发布服务质量”,只有三个值分别是:
QoS 0:“至多一次”,消息发布彻底依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于以下状况,环境传感器数据,丢失一次读记录无所谓,由于不久后还会有第二次发送。
QoS 1:“至少一次”,确保消息到达,但消息重复可能会发生。
QoS 2:“只有一次”,确保消息到达一次。这一级别可用于以下状况,在计费系统中,消息重复或丢失会致使不正确的结果。git

 

2、下载与安装
一、Mosquitto存在不少版本,若是想体验比较新版本能够上github,可是比较麻烦的是须要本身去编译成windows文件,编译须要用到cmake软件,我以前操做过没问题,能够参照其余博主的文章:[https://blog.csdn.net/vwadev/article/details/50148265]。github

官方后面提供了比较稳定的window安装版本,安装完成后能够直接使用,而且自动添加成 windows服务,很是方便,下载路径:https://mosquitto.org/downloadweb

 

二、安装完成。若是须要使用,直接启动服务便可。windows

 

三、Mosquitto服务默认占用 1883端口,因此可不在配置文件中显式设置。服务器

 

3、关于配置文件的一些重要说明
一、配置文件在安装目录下的mosquitto.conf,默认状况下不作任何修改,就能够启动mosquitto。
二、配置说明中出现的地址例如:“/var/run/mosquitto”,“/var/log/messages”,都是相对路径,相对于系统盘根目录。这个地方很重要,他可不是相对于安装目录的根目录。例如“/var/run/mosquitto”表示的是“c:\var\run\mosquitto”,我有一段时间一直没搞定,就是这个目录缘由,不少人没有反馈这个问题,由于都是在linux用因此没啥问题。websocket

三、安装目录的完整路径中,不能出现空格,不然在命令行就没法经过。Mosquitto默认安装路径是在“C:\Program Files\mosquitto”,这里面的“Program Files”就存在空格,致使不少问题,这个也要特别注意。因此后来我改成安装在“C:\MosquittoTest”网络

 

4、配置登陆帐号和密码
一、若是想方便测试能够下载安装MQTT客户端(http://www.eclipse.org/paho/components/tool/),我本身是用这个,不过下面咱们仍是用原生的命令行操做:并发

 二、在配置文件mosquitto.conf中,任意位置加入下面文本,保存退出(我说的全新安装的状况下,若是是维护已经使用好久的系统,可在配置文件中找到对应的属性进行更改)

#设置不容许匿名登陆
allow_anonymous false
#设置帐户密码文件位置为C:\MosquittoTest\pwfile.example
password_file /MosquittoTest/pwfile.example

 

三、重启mosquitto服务配置文件的修改才能生效。为了方便调试和操做,咱们后面的操做所有经过命令行模式进行。

四、插入新用户名及密码,输入密码时界面是不会显示的,直接输入后回车就能够,须要连续输入两次。保证pwfile.example的路径和上面的配置一致。下面打开CMD并进入mosquitto根目录输入:
mosquitto_passwd -c /MosquittoTest/pwfile.example FirstUserName (使用-c 参数会致使清空密码文件,从新插入用户)

mosquitto_passwd /MosquittoTest/pwfile.example SecondUserName (不使用-c 表示追加用户,不影响旧用户)


五、建立成功后pwfile.example会出现刚刚添加的用户信息。

 

 六、启动mosquitto 进行测试。

首先启动第一个cmd窗口启动服务:mosquitto.exe -c mosquitto.conf
而后启动第二个cmd窗口订阅'dissun/topic'主题(其中dissun是帐号,111111是密码):mosquitto_sub -u dissun -P 111111 -t 'dissun/topic' -v

最后启动第三个cmd窗口发布订阅'腰疼不加班'信息:mosquitto_pub -u dissun -P 111111 -t 'dissun/topic' -m '腰疼不加班'

 

 

5、配置日期信息
一、配置日期前请先查看第三大点(关于配置文件的一些重要说明)
二、在mosquitto.conf文件中插入:

复制代码
#把日志信息输入到指定文件
log_dest file /MosquittoTest/DisSunLog_1.log

#在控制台输出信息,运行win服务无效
log_dest stdout

#不记录
#log_type none
#########下面的debug、error、warning.....等等能够组合使用。
#记录网络通讯包,通讯包大小(含心跳包),但不显示内容
log_type debug
#错误信息(没见过)
log_type error
#警告信息(没见过)
log_type warning
#设备的订阅信息、发布信息及下线信息(端口、设备名、用户、不包发布内容)
log_type notice
#服务启动关闭信息、版本号、端口号、配置文件信息
log_type information
#全部设备订阅主题提醒
log_type subscribe
#这个没有试出来干啥用的(没见过)
#log_type unsubscribe
#websockets连接信息(没见过)
#log_type websockets
#websockets_log_level 0
复制代码

三、而后重启服务,咱们发一条信息来看看记录了什么。(参照第四节第6点进行发送信息操做获得下面运行界面)

 

四、按Ctrl+C 中止主服务,若是不中止服务,日志文件会被独占锁住没法打开。找到这个日志

  

 五、日志解析

复制代码
##########:如下是information信息
1552112775: mosquitto version 1.5.8 starting
1552112775: Config loaded from mosquitto.conf.
1552112775: Opening ipv6 listen socket on port 1883.
1552112775: Opening ipv4 listen socket on port 1883.

##########:如下是subscribe信息(伪造)
1552113940: mosqsub|11332-DisSunPad 0 'dissun/topic'
20-DisSunPad (c1, k60, u'dissun').

##########:如下是notice信息,订阅客户端上线11332
1552112782: New connection from ::1 on port 1883.
1552112782: New client connected from ::1 as mosqsub|11332-DisSunPad (c1, k60, u'dissun').

##########:如下是debug信息,订阅客户端上线11332
1552112782: No will message specified.
1552112782: Sending CONNACK to mosqsub|11332-DisSunPad (0, 0)
1552112782: Received SUBSCRIBE from mosqsub|11332-DisSunPad
1552112782:     'dissun/topic' (QoS 0)
1552112782: mosqsub|11332-DisSunPad 0 'dissun/topic'
1552112782: Sending SUBACK to mosqsub|11332-DisSunPad

##########:如下是notice信息,发布客户端上线12284
1552112832: New connection from ::1 on port 1883.
1552112832: New client connected from ::1 as mosqpub|12284-DisSunPad (c1, k60, u'dissun').

##########:如下是debug信息,发布客户端上线12284,并发布12字节的信息,而后离线。
1552112832: No will message specified.
1552112832: Sending CONNACK to mosqpub|12284-DisSunPad (0, 0)
1552112832: Received PUBLISH from mosqpub|12284-DisSunPad (d0, q0, r0, m0, ''dissun/topic'', ... (12 bytes))
1552112832: Sending PUBLISH to mosqsub|11332-DisSunPad (d0, q0, r0, m0, ''dissun/topic'', ... (12 bytes))
1552112832: Received DISCONNECT from mosqpub|12284-DisSunPad

##########:如下是notice信息,发布客户端离线12284
1552112832: Client mosqpub|12284-DisSunPad disconnected.

##########:如下是debug信息,订阅客户端保持跟mosquitto的联系。PINGREQ请求心跳包,PINGRESP回应心跳包
1552112842: Received PINGREQ from mosqsub|11332-DisSunPad
1552112842: Sending PINGRESP to mosqsub|11332-DisSunPad
1552112902: Received PINGREQ from mosqsub|11332-DisSunPad
1552112902: Sending PINGRESP to mosqsub|11332-DisSunPad
1552112962: Received PINGREQ from mosqsub|11332-DisSunPad

##########:如下是information信息 主服务中断
1552113191: mosquitto version 1.5.8 terminating
复制代码

6、若是要开启webSockets,它是支持的。可是要显式的加入mqtt协议及端口
#MQTT协议
port 1883
protocol mqtt

#websockets协议
listener 8000 
protocol websockets

#若是须要查看websockets日志还能够加入如下面,上面有提过。
log_type websockets
websockets_log_level 0

 

 

7、用户访问控制acl_file,看遍了全部的文章,操做都不生效。加了访问控制后全部的的用户,都没法正常的收发信息,因此等下次研究透了再追加。感受这玩意从Linux移至过来,不是彻底通用。

不过仍是按照说明把操做写下来,有看出问题的童鞋能够跟我反馈下。(注:下面的内容操做没有经过,请读者自行试验)

一、在mosquitto.cong中间中加入

#加入访问控制列表文件Acls

acl_file /MosquittoTest/aclfile.example

二、修改aclfile.example内容,加入用户的权限

复制代码
# This affects access control for clients with no username.
topic read $SYS/#

# This only affects clients with username "roger".
#user roger
#topic foo/bar

user dissun
topic dissun/topic

# This affects all clients.
pattern write $SYS/broker/connection/%c/state
复制代码

三、CMD启动mosquitto。

四、按道理说设置就是这么多,没那么复杂,可是此时dissun用户订阅是成功的,可是dissun用户发布失败,服务debug日志显示“denied”。我怀疑是acl文件加载失败,因此换了绝对路径,可是依然没有效果,搞了一下午不成功放弃,之后再搞。

 

#### 原创:DisSun ##########

#### 时间:2019.03.10 #######

相关文章
相关标签/搜索