【小白也能玩转的MQTT】在Windows 系统上搭建开源物联网 MQTT 消息服务器EMQX并进行完整测试


前言

EMQX 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器,目前广泛应用于全球各行业物联网平台建设中。其设计目标是实现高可靠承载海量物联网终端的 MQTT 连接,支持在海量物联网设备间低延时消息路由。
在这里插入图片描述


一、什么是MQTT服务

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

MQTT 连接的基本概念
MQTT 连接由客户端向服务器端发起。任何运行了 MQTT 客户端库的程序或设备都是一个 MQTT 客户端,而 MQTT 服务器则负责接收客户端发起的连接,并将客户端发送的消息转发到另外一些符合条件的客户端。

客户端与服务器建立网络连接后,需要先发送一个 CONNECT 数据包给服务器。服务器收到 CONNECT 包后会回复一个 CONNACK 给客户端,客户端收到 CONNACK 包后表示 MQTT 连接建立成功。如果客户端在超时时间内未收到服务器的 CONNACK 数据包,就会主动关闭连接。

大多数场景下,MQTT 通过 TCP/IP 协议进行网络传输,但是 MQTT 同时也支持通过 WebSocket 或者 UDP 进行网络传输。

二、如何架设MQTT服务

MQTT是一种协议,建立一个 MQTT 连接是使用 MQTT 协议进行通信的第一步。有很多软件可以提供MQTT服务。本文将以 EMQX v4.3.10(开源版)为例,介绍 EMQX 在 Windows 上的安装方法以及常见问题,为大家利用 MQTT 消息服务器快速搭建物联网平台提供帮助。

1. 下载与解压

EMQX官网:https://www.emqx.io/zh/downloads?os=Windows

在这里插入图片描述
我们假设解压到:C:\ProgramData\emqx-5.0.9目录下
在这里插入图片描述

2. 启动EMQX服务

Win+R 打开终端cmd后再输入如下指令,提示如下即算启动成功:

Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>cd C:\ProgramData\emqx-5.0.9\bin

C:\ProgramData\emqx-5.0.9\bin>emqx start
node.db_role = EMQX_NODE__DB_ROLE = core
node.db_backend = EMQX_NODE__DB_BACKEND = mnesia

C:\ProgramData\emqx-5.0.9>

3. 打开dashboard面板

3.1 打开浏览器,进入:http://localhost:18083/*
用户名:admin
密码:public

注意:默认密码登录后,需要立即修改管理员密码。

3.2 修改界面为中文
选择左侧图标设置,将Language选“简体中文”,点击下方“Apply”,即可修改为中文界面。
在这里插入图片描述

4. 开机启动EMQX

键盘Win键+R 输入shell:startup,转到Windows“启动”目录,新建文件emqx.bat(文件名自命名,扩展名是bat就行),并保存以下内容。以后开机后即可自动启动EMQX服务,实现自动加载MQTT消息服务。

C:\ProgramData\emqx-5.0.9\bin\emqx start

三、测试MQTT消息服务

1. 下载安装测试工具MQTTX

https://mqttx.app/zh#download
下载后默认安装即可。

2. 打开MQTTX创建新链接

Name:就是我们刚才dashboard首页看到的name
Client ID:自动生成,不用管
Host:默认选mqtt://;把后面默认的broker.emqx.io,改为127.0.0.1,我们在本地,以后改成服务器的公网IP,就可以远程使用了。
Port:默认1883不动
在这里插入图片描述
点右上角Connect进行连接。连接成功后,可以在dashboard看到连接数变为1。
在这里插入图片描述
没有订阅用户,设置topic为pop,msg默认hello。点击了右下角的消息发送,因为没有订阅所以消息发送后没有接收。
在这里插入图片描述

3. 添加订阅

点击“New Subscription” ,出现如下提示框。并设置Topic为刚才设置的pop,后面的/#不动。
在这里插入图片描述

4. 完整的消息生成和订阅接收

在完成了与服务器连接后,设置topic,并增加订阅后,手动发送了一条消息,发送完,瞬间就被订阅用户接收到。至此完成一个闭环的消息生成传送服务器,再由订阅用户接收到服务器推送的消息。
在这里插入图片描述

5. 多个主题及多个订阅

可以设置多个主题topic,也可以增加多个订阅。
在这里插入图片描述

6. 通过互联网访问

打开终端输入ipconfig查看,ipv4 IP地址,如果是公网IP地址,使用该IP替换http://localhost:18083/*的localhost,即可实现互联网访问。也即可以实现互联网下的MQTT消息订阅功能。

四、常见问题与注意事项

1. EMQX官方文档

https://www.emqx.io/docs/zh/v5.0/

2. 如何在 Python 中使用 MQTT

已经官方案例了,就不啰嗦了,见案例。
https://www.emqx.com/zh/blog/how-to-use-mqtt-in-python

3. 常见问题与解决办法

(1)检查端口占用
端口占用会导致 EMQX 无法启动或部分功能异常,常见的症状有:

(2)执行 emqx start 时提示启动超时
无法打开 Dashboard 或打开后一直报 404 Not Found 错误
出现以上情况,可以使用 emqx console 命令启动 EMQX,console 模式下可以打印详细的错误日志。

(3)EMQX 默认情况下监听以下端口:

端口说明
集群通信
4369-4380集群通信
5370-5380集群 RPC 通信
协议接入
1883MQTT 协议端口
11883MQTT 协议端口
8883MQTT/SSL 端口
8083MQTT/WebSocket 端口
5683LwM2M 端口
管理监控
8081HTTP API 端口
18083Dashboard 管理控制台端口

总结

MQTT是物联网的基础,作为初学者,可以在本地先建立一个以上的服务器,然后在局域网环境里先测试,之后再考虑在互联网上搭建服务器,使用EMQX CLOUD 或者租用阿里云等平台的MQTT,实现应用部署。

后面,我们会研究一下使用ESP8266/ESP32生成topic并由其它完成订阅。

万物互联,以后是物联网的世界。可玩的还有很多,以后再慢慢研究慢慢分享给大家。如果这批文章对你有帮助,感谢在评论区里反馈!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT里的交易员

分享是一种快乐,打赏是一种肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值