这是机器未来的第24篇文章

原文首发地址:https://blog.csdn.net/RobotFutures/article/details/125532208

1. mosquitto概述

Eclipse mosquitto是一个开源(EPL/EDL许可的)消息代理,它实现了MQTT协议版本5.0、3.1.1和3.1。mosquito是轻量级的,适用于所有设备,从低功耗的单板计算机到完整的服务器。

MQTT协议提供了使用发布/订阅模型执行消息传递的轻量级方法。这使得它适用于物联网消息传递,如低功耗传感器或移动设备,如手机、嵌入式计算机或微控制器。

mosquito to项目还提供了一个用于实现MQTT客户机的C库,以及非常流行的mosquito to_pub和mosquito to_sub命令行MQTT客户机。

2. 下载MQTT部署软件

下载地址:传送门

3. 快速上手mosquitto

3.1 启动mqtt broker

启动命令行工具,切换到mosquitto安装目录,执行如下命令,启动broker

mosquitto.exe -v

默认开启的端口为1883。

命令详情如下:

mosquitto [-c config file] [ -d | --daemon ] [-p port number] [-v]

-c 指定配置文件路径,默认配置路径为安装目录下的mosquitto.conf
-d 启动时进入后台运行
-p 指定端口,默认为1883
-v 开启日志输出

注意事项:如果不指定配置文件,默认仅支持127.0.0.1的本地回环网卡连接,如果要连接局域网或外网客户端,那么一定要指定配置文件mosquitto.conf:

listener 1883
allow_anonymous true  # 允许匿名访问

启动命令如下:

mosquitto.exe -c mosquitto.conf -v

因电脑配置问题,这里使用自定义端口测试

#mosquitto.exe -v -p 6969
1647942133: mosquitto version 2.0.14 starting
1647942133: Using default config.
1647942133: Starting in local only mode. Connections will only be possible from clients running on this machine.
1647942133: Create a configuration file which defines a listener to allow remote access.
1647942133: For more details see https://mosquitto.org/documentation/authentication-methods/
1647942133: Opening ipv4 listen socket on port 6969.
1647942133: Opening ipv6 listen socket on port 6969.
1647942133: mosquitto version 2.0.14 running

3.2 订阅主题

mosquitto_sub.exe -t sensors/temperature -q 1 -p 6969

-t 指定topic,这里为传感器温度值 sensors/temperature
-q 指定qos质量,这里为1
-p 指定端口,这里为6969

命令执行后,broker的日志描述如下:

1647942590: New connection from 127.0.0.1:1746 on port 6969.
1647942590: New client connected from 127.0.0.1:1746 as auto-651BD76A-09A1-67FD-1DF9-AF36BEADB2D0 (p2, c1, k60).
1647942590: No will message specified.
1647942590: Sending CONNACK to auto-651BD76A-09A1-67FD-1DF9-AF36BEADB2D0 (0, 0)
1647942591: Received SUBSCRIBE from auto-651BD76A-09A1-67FD-1DF9-AF36BEADB2D0
1647942591:     sensors/temperature (QoS 1)
1647942591: auto-651BD76A-09A1-67FD-1DF9-AF36BEADB2D0 1 sensors/temperature
1647942591: Sending SUBACK to auto-651BD76A-09A1-67FD-1DF9-AF36BEADB2D0

auto-651BD76A-09A1-67FD-1DF9-AF36BEADB2D0 - 连接成功后,broker分配的会话ID
CONNACK:对Connect命令的响应
SUBSCRIBE :客户端发起的订阅请求
SUBACK :broker对客户端auto-651BD76A-09A1-67FD-1DF9-AF36BEADB2D0的SUBSCRIBE命令的反馈

3.3 发布主题

mosquitto_pub.exe -t sensors/temperature -m 32 -q 1 -p 6969

-t 指定topic,这里为传感器温度值 sensors/temperature
-q 指定qos质量,这里为1
-p 指定端口,这里为6969
-m指定消息,这里消息为32

命令执行后:

  • broker的日志输出如下
1647942676: New connection from 127.0.0.1:1914 on port 6969.
1647942676: New client connected from 127.0.0.1:1914 as auto-BADB5BE4-8FF4-C9F8-DD05-955CEC58CA3D (p2, c1, k60).
1647942676: No will message specified.
1647942676: Sending CONNACK to auto-BADB5BE4-8FF4-C9F8-DD05-955CEC58CA3D (0, 0)
1647942676: Received PUBLISH from auto-BADB5BE4-8FF4-C9F8-DD05-955CEC58CA3D (d0, q1, r0, m1, 'sensors/temperature', ... (2 bytes))
1647942676: Sending PUBLISH to auto-651BD76A-09A1-67FD-1DF9-AF36BEADB2D0 (d0, q1, r0, m1, 'sensors/temperature', ... (2 bytes))
1647942676: Sending PUBACK to auto-BADB5BE4-8FF4-C9F8-DD05-955CEC58CA3D (m1, rc0)
1647942676: Received PUBACK from auto-651BD76A-09A1-67FD-1DF9-AF36BEADB2D0 (Mid: 1, RC:0)
1647942676: Received DISCONNECT from auto-BADB5BE4-8FF4-C9F8-DD05-955CEC58CA3D
1647942676: Client auto-BADB5BE4-8FF4-C9F8-DD05-955CEC58CA3D disconnected.
  • 订阅的客户端日志输出如下:
PS E:\Tools\mosquitto> mosquitto_sub.exe -t sensors/temperature -q 1 -p 6969
32

可以看到,订阅客户端已经收到了发布者发布的消息:温度值32

3.4 简单的订阅/发布工作流

4. 测试过程中遇到的问题

4.1 记录mosquitto端口访问失败调试记录

  • 以命令mosquitto -v启动MQTT broker的端口开放情况如下:
PS X:> netstat -an |findstr "1883"TCP    127.0.0.1:1883        0.0.0.0:0              LISTENINGTCP    [::1]:1883            [::]:0                 LISTENING
  • 以命令mosquitto -c .\mosquitto.conf -v启动MQTT broker的端口开放情况如下:
PS C:\Users\25267> netstat -an |findstr "1883"TCP    0.0.0.0:1883         0.0.0.0:0              LISTENINGTCP    192.168.149.108:1883 192.168.149.162:59826  ESTABLISHEDTCP    [::]:1883             [::]:0                 LISTENING

可以看到未加载配置文件时,默认仅支持回环网卡。

《MQTT从入门到提高系列》快速导航:

  • 【MQTT从入门到提高系列 | 01】从0到1快速搭建MQTT测试环境
  • 【MQTT从入门到提高系列 | 02】MQTT3.1.1TLS加密传输
  • 【MQTT从入门到提高系列 | 03】一文掌握MQTT3.1.1协议框架
  • 【MQTT从入门到提高系列 | 04】MQTT应用协议之CONNECT
  • 【MQTT从入门到提高系列 | 05】MQTT3.1.1之PUBLISH发布工作流
  • 【MQTT从入门到提高系列 | 06】MQTT3.1.1之SUBSCRIBE订阅工作流
  • 【MQTT从入门到提高系列 | 07】MQTT3.1.1之链路保活及断开
  • 【MQTT从入门到提高系列 | 08】MQTT3.1.1主题Topic详解
  • 【MQTT从入门到提高系列 | 09】WireShark抓包分析MQTT报文

写在末尾:

  • 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
  • 专栏简介:从0到1掌握分布式消息中间件MQTT的使用。
  • 面向人群:具备嵌入式开发基础的初级以上程序员
  • 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待
  • Python零基础快速入门系列
    • 快速入门Python数据科学系列
    • 人工智能开发环境搭建系列
    • 机器学习系列
    • 物体检测快速入门系列
    • 自动驾驶模拟器AirSim入门系列
    • 自动驾驶物体检测系列

【MQTT从入门到提高系列 | 01】从0到1快速搭建MQTT测试环境相关推荐

  1. ASP.NET 2.0入门与提高系列课程(视频课程讲师:徐栋)

    ASP.NET 2.0入门与提高系列课程(1):揭开Orcas神秘的面纱.zip 讲座内容:做为Visual Studio和.NET Framework下一个版本的"Orcas"吊 ...

  2. 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

    视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...

  3. 脚手架vue-cli系列五:基于Nightwatch的端到端测试环境

    不同公司和组织之间的测试效率迥异.在这个富交互和响应式处理随处可见的时代,很多组织都使用敏捷的方式来开发应用,因此测试自动化也成为软件项目的必备部分.测试自动化意味着使用软件工具来反复运行项目中的测试 ...

  4. 快速搭建MQTT服务器(MQTTnet和Apache Apollo)

    前言 MQTT协议是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分,http://mqtt.org/. MQTT is a machine-to-machine (M2M)/" ...

  5. nodejs快速搭建MQTT服务器

    简介 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议.它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而 ...

  6. 笔记 黑马程序员C++教程从0到1入门编程——提高编程01

    目录 1 模板 01 模板的概念 02 函数模板基本语法 03 函数模板注意事项 04 函数模板案例-数组排序 05 普通函数与函数模板区别 06 普通函数与函数模板调用规则 07 模板的局限性 08 ...

  7. 【ML从入门到入土系列01】概述

    文章目录 1 ML基本概念 1.1 ML分类 1.2 基本术语 2 ML基本流程 3 ML算法 4 ML评估 4.1 评估方法 4.2 评估指标 1 ML基本概念 如下图所示,ML 是计算机从数据中学 ...

  8. 智能机器人软件开发入门教程:带你从0到1快速入门

    机器人,现在遍布我们的生活,怎样才能让机器人运作?你了解吗?今天就给大家分享一套智能机器人软件开发教程,教你如何让机器人运作! 对微机原理和硬件控制原理深入理解,使学员更扎实的掌握软硬件开发的核心能力 ...

  9. React UI 组件库 Chakra UI - 01 v1.0介绍和快速使用

    Chakra UI Chakra UI 是简单.模块化和可访问的 UI 组件库. 本文 Chakra UI 版本:v1.6.2 基于 React 和 Emotion(CSS-IN-JS 方案库) 基于 ...

最新文章

  1. 这两者需要映射到相同的服务器,从而无法打开项目的解决方法:
  2. f(f(x)) = -x
  3. CSS3制作文字特效
  4. CCF 差分约束--201809再卖菜
  5. python学习之路(九)
  6. 12.深度学习练习:Residual Networks(注定成为经典)
  7. S5PV210体系结构与接口09:SD卡启动详解
  8. hbase 查询_不用ES也能海量数据复杂查询秒回
  9. spark 读取elasticsearch数据
  10. [原创] 测试策略是什么?
  11. 解决办法:configure后,没有更新Makefile
  12. CSDN出品,必是精品:CSDN浏览器助手!
  13. 添加字段的sql语句
  14. 【线性系统】五、稳定性
  15. NFS 服务端配置流程
  16. 人寿保险的十大真相 保险不是什么时候都能买的
  17. “测验你左右脑分别有几岁”到底是个什么鬼?
  18. Reactjs项目构建
  19. HTML5 小组 北京站 沙龙
  20. 树莓派raspios(原raspbian)下载地址

热门文章

  1. 房地产合同档案分类及编号规则
  2. LeetCode第 844 题:比较含退格的字符串(C++)
  3. 蓝牙怎么区分单模和双模_蓝牙中的单模、双模是什么,它们有何不同
  4. 2017下半年掘金日报优质文章合集:iOS篇
  5. 关于订单扫码在线支付
  6. 凤姐都在理财了,你在干什么?
  7. HTTPS 的实现原理
  8. python如何安装pil库_Python安装PIL库
  9. 使用卡尔曼滤波和扩展卡尔曼滤波进行毫米波雷达和激光雷达数据融合示例
  10. matlab示波器图形保存,MATLAB中示波器数据的绘图与保存