Windows系统下安装Mosquitto的步骤(7)

接前一篇文章:Windows系统下安装Mosquitto的步骤(6)

本文内容参考:

Windows下搭建MQTT服务器_mqtt服务器软件-CSDN博客

Enable SSL/TLS Connection | EMQX Enterprise Docs

特此致谢!

上一回讲解了使用MQTTX图形界面实现与远程服务器通信的功能。现在还剩一个问题没有解决:通过命令行实现带安全的MQTTX图形界面的功能。

上一回提到,笔者使用Mosquitto命令行,即使将IP地址、端口号、MQTT用户名、密码、名称以及“--cafile XXX”都加上了、都与实际相一致即与MQTTX图形界面中填入的内容一致,仍然不能向MQTTX图形界面那样,连接远程服务器。笔者尝试过各种方法,也怀疑过是某个参数还需要加入并尝试加入,但都不能正常连接。

由此引出了本回的主角 —— MQTTX CLI。

1. MQTTX CLI简介

MQTTX CLI的主页如下:

简介 - MQTTX CLI 文档

MQTTX CLI是EMQ开源的一款MQTT 5.0命令行客户端工具,也是命令行上的MQTTX旨在帮助开发者在不需要使用图形化界面的基础上,也能更快地开发和调试MQTT服务与应用

使用示例

功能特性

  • 基于Apache License 2.0协议,开放源码
  • 跨平台,支持Windows、macOS、Linux
  • 无依赖限制,基于命令行的安装和使用,无任何环境依赖要求
  • 易于集成,可快速集成到自动化测试脚本中
  • 支持MQTT v3.1.1以及MQTT v5.0
  • 支持CA、自签名证书,以及单、双向SSL认证
  • 性能测试,快速测试MQTT服务的性能

2. MQTTX CLI下载

(1)转到下载页面

登录或跳转到以下页面:

MQTTX CLI: 强大而易用的 MQTT 命令行客户端

(2)选择下载版本

根据自己的电脑配置选择相应的版本。笔者的电脑是Win11 64位,因此选择的是“v1.9.10.cli.win64.exe”。

(3)进行下载

点击以上红色框中的链接,开始下载。

注:由于笔者之前下载过,因此再次下载时有个“ (1)”,如果是首次下载则没有。

(4)查看下载文件

下载完成后,文件名为:mqttx-cli-win-x64.exe(这里仍以笔者第一次下载的文件名为例)。

特别说明:

这里有一点特别说明一下,这个exe文件下载完成之后,可能会被电脑中的防火墙阻住。

 此时进行如下处理:

这样就能够真正下载下来了。

3. MQTTX CLI安装

MQTTX CLI无需安装。

笔者曾经按照正常的软件安装逻辑双击进行安装,结果一闪而过。以管理员身份运行,闪退得更快了。笔者一开始还以为是系统和这个软件存在兼容性问题,后来恍然大悟,这就是个直接在命令行调用的命令,无需安装。

看一下具体的命令提示:

> .\mqttx-cli-win-x64.exe -h
Usage: mqttx [options] [command]An MQTT client for the command lineOptions:-v, --version       output the version number-h, --help          display help for commandCommands:check               Check for updates.conn [options]      Create a connection and connect to MQTT Broker.pub [options]       Publish a message to a topic.sub [options]       Subscribes to one or more topics.bench               MQTT Benchmark in performance testing.simulate [options]  Publish scenario-specific simulation messages at a custom rate and a number of connections.ls [options]        List information based on the provided options.help [command]      display help for command
 .\mqttx-cli-win-x64.exe pub --help
Usage: mqttx pub [options]Publish a message to a topic.Options:-t, --topic <TOPIC>                               the message topic-m, --message <BODY>                              the message body (default: "Hello From MQTTX CLI")-q, --qos <0/1/2>                                 the QoS of the message (default: 0)-r, --retain                                      send a retained message-d, --dup                                         mark as duplicate flag-s, --stdin                                       read the message body from stdin-M, --multiline                                   read lines from stdin as multiple messages-pf, --payload-format-indicator                   the payload format indicator of the publish message-e, --message-expiry-interval <NUMBER>            the lifetime of the publish message in seconds-ta, --topic-alias <NUMBER>                       value that is used to identify the topic instead of using the topicname-rt, --response-topic <TOPIC>                     string which is used as the topic name for a response message-cd, --correlation-data <DATA>                    used by the sender of the request message to identify which requestthe response message is for when it is received-up, --user-properties <USERPROPERTIES...>        the user properties of MQTT 5.0 (e.g. -up "name: mqttx cli")-si, --subscription-identifier <NUMBER>           the identifier of the subscription-ct, --content-type <TYPE>                        a description of the content of the publish message-V, --mqtt-version <5/3.1.1/3.1>                  the MQTT version (default: 5)-h, --hostname <HOST>                             the broker host (default: "localhost")-p, --port <PORT>                                 the broker port-f, --format <TYPE>                               the format type of the input message, support base64, json, hex andcbor-i, --client-id <ID>                              the client id (default: "mqttx_4aae0769")--no-clean                                        set the clean session flag to false-k, --keepalive <SEC>                             send a ping every SEC seconds (default: 30)-u, --username <USER>                             the username-P, --password <PASS>                             the password-l, --protocol <PROTO>                            the protocol to use, mqtt, mqtts, ws, or wss (default: "mqtt")--path <PATH>                                     the path of websocket (default: "/mqtt")--key <PATH>                                      path to the key file--cert <PATH>                                     path to the cert file--ca <PATH>                                       path to the ca certificate--insecure                                        do not verify the server certificate--alpn <PROTO...>                                 set one or multiple ALPN (Application Layer Protocol Negotiation)protocols-rp, --reconnect-period <MILLISECONDS>            interval between two reconnections, disable auto reconnect bysetting to 0 (default: 1000)--maximum-reconnect-times <NUMBER>                the maximum reconnect times (default: 10)-se, --session-expiry-interval <SECONDS>          the session expiry interval in seconds--rcv-max, --receive-maximum <NUMBER>             the receive maximum value--maximum-packet-size <NUMBER>                    the maximum packet size the client is willing to accept--topic-alias-maximum <NUMBER>                    the topic alias maximum value--req-response-info                               the client requests response information from the server--no-req-problem-info                             the client requests problem information from the server-Cup, --conn-user-properties <USERPROPERTIES...>  the connect user properties of MQTT 5.0 (e.g. -Cup "name: mqttxcli")-Wt, --will-topic <TOPIC>                         the will topic-Wm, --will-message <BODY>                        the will message-Wq, --will-qos <0/1/2>                           the will qos-Wr, --will-retain                                send a will retained message-Wd, --will-delay-interval <SECONDS>              the will delay interval in seconds-Wpf, --will-payload-format-indicator             will message is UTF-8 encoded character data or not-We, --will-message-expiry-interval <SECONDS>     lifetime of the will message in seconds-Wct, --will-content-type <CONTENTTYPE>           description of the will message’s content-Wrt, --will-response-topic <TOPIC>               topic name for a response message-Wcd, --will-correlation-data <DATA>              correlation data for the response message-Wup, --will-user-properties <USERPROPERTIES...>  the user properties of will message--save [PATH]                                     save the parameters to the local configuration file, which supportsjson and yaml format, default path is ./mqttx-cli-config.json--config [PATH]                                   load the parameters from the local configuration file, whichsupports json and yaml format, default path is./mqttx-cli-config.json-Pp, --protobuf-path <PATH>                       the path to the .proto file that defines the message format forProtocol Buffers (protobuf)-Pmn, --protobuf-message-name <NAME>              the name of the protobuf message type (must exist in the .protofile)--debug                                           enable debug mode for MQTT.js (default: false)--help                                            display help for command

4. 实际使用和问题

MQTTX CLI与MQTTX同宗同源,因此其命令应该与图形界面连接得更为紧密、也更为接近,应该能够找到与图形界面更为接近的命令选项。

经过笔者的实验和测试,命令如下:

.\mqttx-cli-win64.exe -h <host_ip_address> -p <port> -u <user_name> -P <password> -t <topic> -l mqtts --ca <full_path_of_ca_file>

代入示例值(不是真实值,只是为了说明)的命令如下:

.\mqttx-cli-win64.exe pub -h '123.234.345.456' -p 8877 -u user1 -P 1234 -t sensor -l mqtts --ca 'C:\Program Files\ca.cer'

与前文书中Mosquitto的命令相比较:

.\mosquitto_pub.exe -h '123.234.345.456' -p 8877 -u user1 -P 1234 -t sensor --cafile 'C:\Program Files\ca.cer'

但是,会出现以下错误:

意思也和通过Mosquitto出的错误差不多。

但是,MQTTX CLI比Mosquitto强,至少给出了具体的错误。笔者在网上搜索错误关键字“mqttx-cli-win-x64.exe Error [ERR_TLS_CERT_ALTNAME_INVALID]: Hostname/IP does”,在网上找到了一些网页和博文,比如:

TLS problem : ERR_TLS_CERT_ALTNAME_INVALID · Issue #573 · emqx/MQTTX · GitHub

Enable SSL/TLS for EMQX MQTT broker | EMQ

但似乎都不能直接解决这个问题,直到笔者看到了以下网页:

Enable SSL/TLS Connection | EMQX Enterprise Docs

这里边完全解释了出现此错误的原因以及相应的解决方法:

这一段的详细意思如下:

如果服务器证书公用名称(CN)与客户端在连接过程中指定的服务器地址不匹配,将发生以下错误:

Error [ERR_TLS_CERT_ALTNAME_INVALID]: Hostname/IP does not match certificate's altnames: Host: localhost. is not cert's CN: Server

在这种情况下,可以将客户端证书CN设置为与服务器地址匹配,或者使用--insecure选项忽略证书CN验证:

mqttx sub -t 't/1' -h localhost -p 8883 \--protocol mqtts \--ca certs/rootCA.crt \--insecure

也就是说,加入“--insecure”就能够解决问题了。在上边的MQTTX CLI命令行中加入此选项,命令如下:

.\mqttx-cli-win64.exe -h <host_ip_address> -p <port> -u <user_name> -P <password> -t <topic> -l mqtts --ca <full_path_of_ca_file> --insecure

命令示例如下:

.\mqttx-cli-win64.exe pub -h '123.234.345.456' -p 8877 -u user1 -P 1234 -t sensor -l mqtts --ca 'C:\Program Files\ca.cer' --insecure

再次执行命令后,实际结果如下:

错误没有再出现,讷讷狗正常发布消息了。在MQTTX的界面中也收到了信息:

至此,MQTTX和MQTTX CLI的全部功能都已实现了,全部内容也就都讲解完了。Mosquitto、MQTTX、MQTTX CLI的整个下载 、安装、配置,遇到问题、解决问题的全过程也都讲解完了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++开发,opencv-ml库学习,K近邻(KNN)应用

目录 一、k近邻算法 1.1 算法简介 1.2 opencv-k近邻算法 二、cv::ml::KNearest应用 2.1 数据集样本准备 2.2 KNearest应用 2.3 程序编译 2.4 main.cpp全代码 一、k近邻算法 1.1 算法简介 K近邻算法&#xff08;K-Nearest Neighbor&#xff0c;KNN&#xff09;基本原理是…

uniapp 微信开发工具上访问正常,真机调试一直跨域报错

微信小程序真机调试时&#xff0c;出现跨域问题&#xff0c;需要同时在后端设置多种允许跨域的设置&#xff1a; // 指定允许其他域名访问 header(Access-Control-Allow-Origin:*); // 响应类型 header(Access-Control-Allow-Methods:GET,POST,OPTION); // 响应头设置 header(…

【实验】根据docker部署nginx并且实现https

环境准备 systemctl stop firewalld setenforce 0 安装docker #安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 #设置阿里云镜像 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安装最新版…

Unity 编辑器工具 - 资源引用查找器

在Unity项目开发过程中&#xff0c;管理和维护资源之间的引用关系是至关重要的。当然我们项目也是需要这个功能 毕竟项目大了之后查找资源引用还是交给 资源引用查找器 比较好。 功能概述 资源引用查找器允许开发者选择一个目标资源&#xff0c;并在整个项目中查找引用了该资…

记录vue报错问题 in ./node_modules/axios/lib/platform/index.js

今天这个问题困扰了我许久 报错内容如下&#xff1a; 最初一直以为是我没装axios&#xff0c;又重新装了一次&#xff0c;后面才发现是axios版本原因&#xff0c;真的总是被版本的原因困住真的很烦 解决方法如下&#xff1a; 将axios的版本改为1.5.0 1、打开项目的文件夹“…

wireshark的安装使用及相关UDP、TCP、 ARP

初步了解&#xff1a; 进入wireshark后如图&#xff1a; 从图中可以看到很多网络连接在操作的时候我们需要监测哪些 我们可以直接在本地的运行框中输入ipconfig来查看 如图&#xff1a; 从以上图片中我们可以清楚地看到哪些网络连接已经连接的我们只需要按需监测他们即可 但…

JSP与JavaBean

目录 一、JavaBean是什么 二、创建JavaBean 三、在JSP中使用JavaBean 1、按照Java语法直接使用 2、<jsp:useBean>动作 Bean的加载原理 scope属性的不同取值 3、<jsp:setProperty>动作 设置为一个表达式的值或字符序列 通过表单的参数的值来设置Bean的相应…

【C++】STL — List的接口讲解 +详细模拟实现

前言&#xff1a; 本章我们将学习STL中另一个重要的类模板list… list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是带头双向循环链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xf…

论文笔记ColdDTA:利用数据增强和基于注意力的特征融合进行药物靶标结合亲和力预测

ColdDTA发表在Computers in Biology and Medicine 的一篇一区文章 突出 • 数据增强和基于注意力的特征融合用于药物靶点结合亲和力预测。 • 与其他方法相比&#xff0c;它在 Davis、KIBA 和 BindingDB 数据集上显示出竞争性能。 • 可视化模型权重可以获得可解释的见解。 …

三种滤波(EKF、UKF、CKF)的对比,含MATLAB源代码

使用MATLAB模拟三维的滤波,包含扩展卡尔曼滤波EKF、无迹卡尔曼滤波UKF、容积卡尔曼滤波CKF。 状态更新和观测更新均为非线性的,模拟一定强度的机动性,可用于卡尔曼滤波方法的对比学习,自己修改成需要的运动模型后,可以用于组合导航(GPS+DVL形式)。 运行结果 真值的三轴…

Unity UGUI Image 点击事件忽略空白像素区域

我们会遇到图片不是方形的不规则图片。这个时候我们希望只有点击到图像内容本身才算点击&#xff0c;点击空白区域则不算点击。而UGUI对图片的处理是整个图片都会算作点击区域&#xff0c;这样不能满足于我们的使用需求了。 首先我们需要把图片本身的Read/Write 选项打开 然后…

Meta Llama 3 使用 Hugging Face 和 PyTorch 优化 CPU 推理

原文地址&#xff1a;meta-llama-3-optimized-cpu-inference-with-hugging-face-and-pytorch 了解在 CPU 上部署 Meta* Llama 3 时如何减少模型延迟 2024 年 4 月 19 日 万众期待的 Meta 第三代 Llama 发布了&#xff0c;我想确保你知道如何以最佳方式部署这个最先进的&…

时间日志格式的统一和定制

返回当前格式的时间没有错误&#xff0c;但是不符合中国人的阅读习惯 解决&#xff1a; 方案一&#xff1a;JsonFormat 解决后端 传到 前端格式问题 依赖&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jack…

STM32:GPIO输出

文章目录 1、GPIO介绍1.1 GPIO的基本结构1.1 GPIO的位结构 2、 GPIO工作模式3、GPIO标准外设库接口函数3.1 RCC接口函数3.2 GPIO接口函数3.2.1 GPIO的读取函数3.2.1 GPIO的写入函数 4、GPIO的初始化 1、GPIO介绍 GPIO&#xff08;General Purpose Input Output&#xff09;通用…

Python设计模式 - 单例模式

定义 单例模式是一种创建型设计模式&#xff0c; 其主要目的是确保一个类只有一个实例&#xff0c; 并提供一个全局访问点来访问该实例。 结构 应用场景 资源管理&#xff1a;当需要共享某个资源时&#xff0c;例如数据库连接、线程池、日志对象等&#xff0c;可以使用单例模…

【UnityRPG游戏制作】Unity_RPG项目_玩法相关

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;就业…

【算法与数据结构】哈希表

文章目录 引入哈希函数介绍便利店的例子Python3 中的哈希表C 中的哈希表 应用将散列表用于查找防止重复将散列表用作缓存 哈希冲突与解决链地址法开放寻址 总结参考资料写在最后 引入 假设你在一家便利店上班&#xff0c;你不熟悉每种商品的价格&#xff0c;在顾客需要买单是时…

详述DM9161芯片的特性和用法

目录 概述 1. 认识DM9161 2 DM9161的特性 2.1 特性总结 2.2 结构框图 3 功能描述 4 RMII接口 4.1 100Base-TX Operation 4.2 10Base-T Operation 4.3 Auto-Negotiation 4.4 HP Auto-MDIX功能描述 6 DM9161的寄存器 6.1 寄存器列表 6.2 寄存器功能介绍 6.2.1 基本…

ubuntu20中ros与anaconda的python版本冲突问题

系统环境 原本系统是ubuntu20 noetic&#xff0c;python都在/usr/bin中&#xff0c;一共是两个版本的python&#xff0c;一个是python3.8&#xff0c;另一个是python2.7。 问题发现 当安装anaconda后&#xff0c;并且将anaconda的bin目录加入到系统环境中时候&#xff0c;…

Stable Diffusion webUI 配置指南

Stable Diffusion webUI 配置指南 本博客主要介绍部署Stable Diffusion到本地&#xff0c;生成想要的风格图片。 文章目录 Stable Diffusion webUI 配置指南1、配置环境&#xff08;1&#xff09;pip环境[可选]&#xff08;2&#xff09;conda环境[可选] 2、配置Stable Diffu…