关于Mosquitto配置的资料网上还是有几篇的,但是看来看去,基本上都是基于Linux。基于Window的凤毛麟角,看上去貌似配置的东西相差不大,实操过程中真的烦透了,配置就是不成功,这次把自己实践过程中的东西记录一下,分享出来。

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

二、下载与安装
1、Mosquitto存在很多版本,如果想体验比较新版本可以上github,但是比较麻烦的是需要自己去编译成windows文件,编译需要用到cmake软件,我之前操作过没问题,可以参照其他博主的文章:[https://blog.csdn.net/vwadev/article/details/50148265]。

官方后面提供了比较稳定的window安装版本,安装完成后可以直接使用,并且自动添加成 windows服务,非常方便,下载路径:https://mosquitto.org/download

2、安装完成。如果需要使用,直接启动服务即可。

3、Mosquitto服务默认占用 1883端口,所以可不在配置文件中显式设置。

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

3、安装目录的完整路径中,不能出现空格,否则在命令行就无法通过。Mosquitto默认安装路径是在“C:\Program Files\mosquitto”,这里面的“Program Files”就存在空格,导致很多问题,这个也要特别注意。所以后来我改为安装在“C:\MosquittoTest”

四、配置登录账号和密码
1、如果想方便测试可以下载安装MQTT客户端(http://www.eclipse.org/paho/components/tool/),我自己是用这个,不过下面我们还是用原生的命令行操作:

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

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

3、重启mosquitto服务配置文件的修改才能生效。为了方便调试和操作,我们后面的操作全部通过命令行模式进行。

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

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

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

6、启动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 '腰疼不加班'

#把日志信息输入到指定文件
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

3、然后重启服务,我们发一条信息来看看记录了什么。(参照第四节第6点进行发送信息操作得到下面运行界面)

4、按Ctrl+C 停止主服务,如果不停止服务,日志文件会被独占锁住无法打开。找到这个日志

5、日志解析

##########:以下是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

六、如果要开启webSockets,它是支持的。但是要显式的加入mqtt协议及端口
#MQTT协议
port 1883
protocol mqtt

#websockets协议
listener 8000 
protocol websockets

#如果需要查看websockets日志还可以加入以下面,上面有提过。
log_type websockets
websockets_log_level 0

七、用户访问控制acl_file,看遍了所有的文章,操作都不生效。加了访问控制后所有的的用户,都无法正常的收发信息,所以等下次研究透了再追加。感觉这玩意从Linux移至过来,不是完全通用。

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

1、在mosquitto.cong中间中加入

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

acl_file /MosquittoTest/aclfile.example

2、修改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/baruser dissun
topic dissun/topic# This affects all clients.
pattern write $SYS/broker/connection/%c/state

3、CMD启动mosquitto。

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

Mosquitto服务安装与使用---入门操作介绍相关推荐

  1. metainfo可以设置说明_Vs Code安装说明及入门操作

    因为要开发小程序,所以小新用到了微信开发者工具,但是发现前端开发的真正大佬是 Visual Studio Code. 下面小新就来教你微软的这款工具怎么安装. 一:下载这个软件 下载方法1. 首先,我 ...

  2. Ubuntu (20.4,最新版)安装及简单入门操作

    1.打开VMare WorkStation ,点击文件---->新建虚拟机-->找到宿主机内部Ubuntu镜像的位置: 镜像下载位置: https://msdn.itellyou.cn/ ...

  3. idea软件下载安装及项目结构操作介绍

    01.idea开发工具(下载安装) idea概述: 是用于Java语言开发的集成环境,它是业界公认的目前用于Java程序开发最好的工具. 集成环境:把代码编写,编译,执行,调试等多种综合到一起的开发工 ...

  4. Linux:xinetd服务安装与配置(操作环境:Ubuntu 18.04)

    xinetd服务简介: xinetd是一个守护进程,属于系统中的一个后台进程,周期性的执行某些任务,或者等待某个事件发生.不会随着用户的注销而退出. 支持对tcp.udp.RPC服务(但是当前对RPC ...

  5. Linux 环境下NFS服务安装及配置

    1.NFS概述 NFS 是 Network FileSystem 的缩写,是让不同的主机.不同的操作系统可以共享存储的服务.通过 NFS,我们本地 NFS 的客户端可以透明地读写位于服务端 NFS 服 ...

  6. 有限元剖网格之Gmsh安装与使用入门

    文章目录 有限元剖网格之Gmsh安装与使用入门 Gmsh介绍 Gmsh安装 1. Gmsh图形界面安装 2. Gmsh从源码安装 利用C++语言调用Gmsh的API接口剖网格 有限元剖网格之Gmsh安 ...

  7. 笨木头的Unity3d常用操作介绍

    各位,对不起,我一直都很想快点进入代码的教程,但是不知道为什么,老是在编辑器这边徘徊. 这不,本篇又要介绍编辑器了,唉.(小若:好可怜-个屁吖,还不是你自己要介绍的!) 笨木头花心贡献,啥?花心?不, ...

  8. 尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】

    视频地址:[尚硅谷]大数据技术之Zookeeper 3.5.7版本教程_哔哩哔哩_bilibili 尚硅谷大数据技术Zookeeper教程-笔记01[Zookeeper(入门.本地安装.集群操作)] ...

  9. docker安装+配置镜像+命令操作+数据卷+网络管理+DockerFile+镜像服务+项目部署+[高级使用]

    文章目录 Docker基础 一.Docker介绍 1. 什么是虚拟化 2. 什么是Docker 3. 容器与虚拟机比较 4. Docker优势 5. Docker架构 [1]镜像服务(`Image`) ...

最新文章

  1. CentOS 7 - 最小化安装后,解决无法使用yum命令问题!!
  2. python url请求
  3. ucore-lab1-练习6report
  4. com.sap.ui5.resource.ResourceServlet的工作原理介绍
  5. Spring/MVC映射WEB-INF下的文件(img、css、js等)
  6. 人工智能与量子计算在有前途的新忆阻器中融合
  7. [ARM]【编译】【实践】 - 浮点编译选项NEON引发的Skia的库Illegal instruction运行错误和解决办法
  8. 5.Ray-Handler之ToReadHandler编写
  9. [转]memcached+magent实现memcached集群
  10. RemObjects
  11. 坐标系转换--筛选高于RMS的强源-------ska暑期训练
  12. Opencv Camshift对象跟踪
  13. 免费资源网站,你想要的全都有【各类宝藏资源 】
  14. 销售管理系统er图_这套电商订单管理系统,90%电商玩家都受用
  15. 金蝶K3CLOUD7.2内部培训PPT下载
  16. 小白的破解WiFi之路1----VMware、kali安装
  17. 前端开发工程师就业时应该选择大公司还是小公司?这是我听过最靠谱的答案!
  18. The specified target project directory 项目名\src\main\resources does not exist 问题解决
  19. LoRa 数据速率,码片速率,符号速率
  20. u深度做linux启动盘,u深度u盘启动盘制作教程

热门文章

  1. 如何用样本估计总体?(均值、方差、标准差)
  2. Hadoop的体系结构
  3. win10计算机管理的作用,原来Windows 10还有这么多隐藏的功能
  4. 免费送 2800套精品小程序源码!
  5. 如何重装Mac OS系统
  6. SpreadJS 纯前端表格控件应用案例:金融业数据智能分析平台
  7. arduino mega针脚_Arduino MEGA串口TX1、RX1使用方法
  8. 用真金做的电路板——金手指
  9. InsightFace又出新作!合成更真实更多样近红外人脸图片,助力“近红外-可见光”跨域人脸识别...
  10. C# 压缩PDF文档