MQTT消息服务器mosquitto介绍及说明
Mosquitto是一个开源的消息代理软件,支持MQTT协议(消息队列遥测传输协议)。MQTT是一种轻量级的发布/订阅消息传输协议,专为低带宽、不可靠网络环境下的物联网设备通信而设计。以下是关于Mosquitto服务器的一些介绍和说明:
1.基本功能
- 消息代理:Mosquitto作为MQTT代理,负责接收和分发消息。客户端可以通过它订阅主题并接收消息,或者向主题发布消息。
- 轻量级:Mosquitto非常轻量级,适合嵌入式设备和资源受限的环境。
- 支持QoS等级:支持MQTT协议中的质量服务等级(QoS)0、1和2,确保消息可靠性。
2.安装与配置
- 跨平台支持:可在Linux、Windows、macOS等多个平台上运行。
- 安装:在Linux上可以通过包管理器(如
apt、yum)安装,在Windows和macOS上可以通过下载预编译的二进制文件或通过Homebrew安装。 - 配置文件:Mosquitto的行为可以通过配置文件进行自定义,比如监听端口、安全认证、日志记录等。
在windows上安装的时候,通过下载编译好的exe安装包,双击点击安装即可,就和普通安软件一样无差别,安装文件链接我在下面有分享,记录好安装路径,将该路径添加到系统路径下即可,然后启动的时候,直接在命令行运行mosquitto,命令即可,不报错就表示启动成功了。我的安装后的添加路径如下:
启动如下:

配置可以选择默认的本机,也可以使用自己预设的端口及IP. 配置好之后就可以进行测试了。
首先,需要确保安装了 paho-mqtt 库。你可以使用 pip 进行安装:
pip install paho-mqtt
测试代码如下:
import json
import paho.mqtt.client as mqtt# MQTT 服务器配置
MQTT_BROKER = "localhost" # 服务器地址,如果 Mosquitto 运行在本地
MQTT_PORT = 1883 # 默认 MQTT 端口
MQTT_TOPIC = "your/topic" # 你要发布的主题# 要发送的字典数据
data = {"temperature": 25.5,"humidity": 60,"status": "OK"
}# 将字典转换为 JSON 字符串
payload = json.dumps(data)# 回调函数:连接成功时调用
def on_connect(client, userdata, flags, rc):if rc == 0:print("连接到 MQTT 代理服务器成功")else:print(f"连接失败,错误码 {rc}")# 回调函数:发布消息后的回调
def on_publish(client, userdata, mid):print(f"消息已发布,消息 ID: {mid}")def main():# 创建 MQTT 客户端实例client = mqtt.Client()# 设置回调函数client.on_connect = on_connectclient.on_publish = on_publishtry:# 连接到 MQTT 代理服务器client.connect(MQTT_BROKER, MQTT_PORT, 60)# 启动网络循环(非阻塞)client.loop_start()# 发布消息result = client.publish(MQTT_TOPIC, payload)# 等待发布完成status = result[0]if status == 0:print(f"成功发布消息到主题 `{MQTT_TOPIC}`")else:print(f"发送消息失败,状态码 {status}")except Exception as e:print(f"发生错误: {e}")finally:# 停止网络循环并断开连接client.loop_stop()client.disconnect()if __name__ == "__main__":main()
代码说明
1.导入必要的库:
- json:用于将字典转换为 JSON 字符串。
- paho.mqtt.client:用于 MQTT 通信。
2.配置 MQTT 服务器信息:
- MQTT_BROKER:MQTT 代理服务器地址,通常为 localhost 如果 Mosquitto 运行在本地。
- MQTT_PORT:MQTT 端口,默认是 1883。
- MQTT_TOPIC:发布消息的主题,可以根据需要修改。
3.准备要发送的数据:
- 创建一个字典 data,包含需要发送的数据。
- 使用 json.dumps() 将字典序列化为 JSON 字符串 payload。
4.定义回调函数:
- on_connect:处理连接服务器的响应。
- on_publish:确认消息发布后的响应。
5.主函数 main():
- 创建 MQTT 客户端实例并设置回调函数。
- 连接到 MQTT 代理服务器。
- 启动网络循环 client.loop_start(),使客户端能够处理网络流量(非阻塞模式)。
- 使用 client.publish() 发布消息到指定主题。
- 根据发布结果打印相应的信息。
- 最后,停止网络循环并断开连接。
运行代码
确保 Mosquitto 服务器正在运行。你可以在终端中运行以下命令启动 Mosquitto(如果尚未启动):
mosquitto
然后运行上面的 Python 脚本:
python your_script.py
如果一切设置正确,你应该会看到类似如下的输出:
连接到 MQTT 代理服务器成功
成功发布消息到主题 `your/topic`
消息已发布,消息 ID: 1
订阅主题以验证消息
你可以打开另一个终端,使用 mosquitto_sub 命令订阅主题,验证消息是否成功发送:
mosquitto_sub -h localhost -t your/topic
发布消息后,订阅端应显示发送的 JSON 数据:
{"temperature": 25.5, "humidity": 60, "status": "OK"}
额外提示
- 身份验证:如果你的 Mosquitto 服务器配置了用户名和密码,请在连接时提供:
client.username_pw_set("your_username", "your_password") - 安全连接:如果需要使用 TLS/SSL,请相应配置:
client.tls_set(ca_certs="path/to/ca.crt") - 错误处理:生产环境中建议添加更完善的错误处理和重试机制。
3.安全特性
- TLS/SSL支持:支持TLS/SSL加密,确保消息在传输过程中的安全性。
- 认证和授权:支持用户名和密码认证,以及基于ACL(访问控制列表)的访问控制。
4.性能
- Mosquitto能够处理大量的并发客户端连接,性能良好,适合大规模物联网部署。
5.使用场景
- 物联网:用于物联网设备之间的信息传递,如智能家居、工业自动化等。
- 消息通知系统:可以用于实时消息推送系统,支持多客户端的实时通信。
- 移动应用:适合移动应用之间的低延迟消息传递。
6.常用命令
- 启动Mosquitto服务:
mosquitto -c /path/to/mosquitto.conf - 订阅主题:
mosquitto_sub -h localhost -t test/topic - 发布消息:
mosquitto_pub -h localhost -t test/topic -m "Hello, World!"
7.社区与支持
- Mosquitto有活跃的开发社区,提供文档、论坛和支持,以帮助用户解决问题。
Mosquitto作为MQTT协议的一个实现,因其高效、稳定和易于使用而被广泛应用于物联网领域。
8.下载链接
windows版本的服务器可以去我的CSDN上下载,(mosquitto-1.6.13-install-windows-x64)下载的链接如下:

https://download.csdn.net/download/mzl_18353516147/90089326?spm=1001.2014.3001.5503
相关文章:
MQTT消息服务器mosquitto介绍及说明
Mosquitto是一个开源的消息代理软件,支持MQTT协议(消息队列遥测传输协议)。MQTT是一种轻量级的发布/订阅消息传输协议,专为低带宽、不可靠网络环境下的物联网设备通信而设计。以下是关于Mosquitto服务器的一些介绍和说明ÿ…...
uniapp结合movable-area与movable-view实现拖拽功能
前言 因为公司业务开发需要拖拽功能。 ps:该功能只能针对高度一致的,如果高度不一致需要另外二开 演示 开始 <template><view style"height: 100%;"><movable-area :style"{width: 100%, height: allHeight px}"…...
十九(GIT2)、token、黑马就业数据平台(页面访问控制(token)、首页统计数据、登录状态失效)、axios请求及响应拦截器、Git远程仓库
1. JWT介绍 JSON Web Token 是目前最为流行的跨域认证解决方案,本质就是一个包含信息的字符串。 如何获取:在使用 JWT 身份验证中,当用户使用其凭据成功登录时,将返回 JSON Web Token(令牌)。 作用…...
文生图模型开源之光!ComfyUI - AuraFlow本地部署教程
一、模型介绍 AuraFlow 是唯一一个真正开源的文生图模型,由Fal团队开源,其代码和权重都放在了 FOSS 许可证下。基于 6.8B 参数优化模型架构,采用最大更新参数化技术,还重新标注数据集提升指令遵循质量。在物体空间和色彩上有优势…...
spring boot之@Import注解的应用
我们知道spring boot会通过ComponentScan定义包扫描路径进行业务定义的bean的加载,但是对于很多不在此包路径下定义的bean怎么办呢?比如其他jar包中定义的。这时候import就发挥作用了,通过它也可以实现bean的定义。具体是怎么做的呢ÿ…...
【记录】用JUnit 4的@Test注解时报错java.lang.NullPointerException的原因与解决方法
项目场景: 在练习黑马点评的逻辑过期解决缓存击穿时,编写了一个预热缓存数据的单元测试 SpringBootTest public class HmDianPingApplicationTests {Resourceprivate ShopServiceImpl shopService;Testpublic void testSaveShop() throws InterruptedE…...
Spring Boot 自动化脚本-多线程批量压缩图片
Spring Boot 自动化脚本-多线程批量压缩图片 支持多线程支持多路径配置支持断点续压支持压缩后文件层级路径不变脚本一键启动,支持本地 main 调用或远程 POST 接口调用 背景:在进行数据迁移时,发现附件文件夹过于庞大,且大都为图…...
依托 Spring Boot框架,精铸高扩展性招聘信息管控系统
1 绪 论 1.1 课题背景与意义 在Internet高速发展的今天,计算机的应用几乎完全覆盖我们生活的各个领域,互联网在经济,生活等方面有着举足轻重的地位,成为人们资源共享,信息快速传递的重要渠道。在中国,网上管…...
【前端】理解 JavaScript 对象属性访问的复杂性
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯理论基础:JavaScript 对象属性的访问模式1. 点符号访问(Dot Notation)2. 方括号访问(Bracket Notation)点符号…...
Django异步视图adrf解决办法
提问 在Django编写异步视图的时候会出现 AssertionError: Expected a Response, HttpResponse or HttpStreamingResponse to be returned from the view 或者 TypeError: sync_to_async can only be applied to sync functions. 诸如此类的错误的时候一般发生在异步视图中…...
【一文了解】C#基础-接口
目录 1. 定义 2. 接口的特点与规则 3. 接口的实现 3.1单接口实现 3.2多接口实现 4. 接口的作用和用途 1)扩展行为 2)规范行为 3)降低耦合 5. 接口与继承的比较 1)继承 2)接口 6. 接口与抽象类的比较 1)IComparable(比较器,常用) 2)IComparer(比较器)…...
活着就好20241210
亲爱的朋友们,大家早上好!🌞 今天是10号,星期二,2024年12月的第十天,同时也是第50周的开始,农历甲辰[龙]年十一月初六日。在这晨光熹微的美好时刻,愿那温暖而明媚的阳光轻轻拂过你的…...
多表设计 - 一对一多对多
一.一对一关系概述: 例如:一位用户只能有一张身份证,一张身份证也只能对应一位用户 如果用户基本信息查询频率比用户身份信息查询频率高,为了提高效率,可拆分为两张表: 此时如何体现一对一的关系呢…...
实现 DataGridView 下拉列表功能(C# WinForms)
本文介绍如何在 WinForms 中使用 DataGridViewComboBoxColumn 实现下拉列表功能,并通过事件响应来处理用户的选择。以下是实现步骤和示例代码。 1. 效果展示 该程序的主要功能是展示如何在 DataGridView 中插入下拉列表,并在选择某一项时触发事件。 2.…...
使用Java创建RabbitMQ消息生产者的详细指南
目录 在现代分布式系统中,消息队列是实现异步通信的重要工具。RabbitMQ作为一种流行的开源消息代理,支持多种消息协议,广泛应用于微服务架构和事件驱动的应用程序中。本文将深入探讨如何使用Java创建RabbitMQ的消息生产者,发送消息…...
【LC】160. 相交链表
题目描述: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意&…...
Spark架构及运行流程
Spark架构图 Driver: 解析用户的应用程序代码,转化为作业(job)。创建SparkContext上下文对象,其负责与资源管理器(ClusterManager)通信,进行资源的申请、任务的分配和监控等。跟踪Executor的执行情况。可通过UI界面查询运行情况。…...
Linux安装Python2.7.5(centos自带同款)
卸载已安装的python,防止版本兼容问题 rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps 删除残余文件 whereis python |xargs rm -frv 安装前提是已安装gcc和g gcc --version g --version 下载安装python2.7.5 https://www.python.org/downloads/release/pyt…...
上传ssh公钥到目标服务器
创建密钥 ssh-keygen -t rsa -b 4096 -C "xxxx.xx"上传 sudo ssh-copy-id -i /Users/xx/.ssh/id_rsa.pub root127.0.0.1...
【LLMs】用LM Studio本地部署离线大语言模型
文章目录 一、下载LM Studio二、下载大语言模型1. 查看模型介绍2. 点击模型文件进行下载2.1 完整下载2.2 部分下载 三、加载模型1. 打开LM Studio图形化界面,点击**My Models**2. 然后,点击“...”,选择“change”,选择刚下载好的…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
