Docker搭建MQTT服务器
HDUZN

MQTT简介

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

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

MQTT实现方式

看以上图,MQTT协议中有两种主要身份:

  • MQTT Broker(消息代理):服务器
  • Publish(发布者)、Subscribe(订阅者):客户端

一个设备可以既是发布消息端,也可以同时订阅消息。

MQTT传输的消息有2个部分:

  • 主题(Topic):就是消息的主题/类型/分类。订阅者订阅一个Topic后,就能收到该Topic的消息内容。
  • 负载(payload):就是消息的内容(可是是文字、数值这些)。

MQTT使用举例
像物联网这块就用的比较多,假设有一个物联网设备(掌控板、行空板),接个对应的传感器,就可以获取温度、湿度、光强度这些数据,那怎么把获取到的数据实时传到服务器上记录下来呢,就用这个MQTT就行。

把传感器获取到的数据,用Publish(发布)到MQTT服务器上,同时也可以用Subscribe订阅MQTT服务器端传过来的消息。

把数据收集起来后,就可以做具体的分析、展示(数据可视化)了。

像行空板就自带了SloT这个针对学校场景的开源免费的MQTT服务器软件, 可一键创建本地物联网服务器。相当于一个行空板设备,自己作为一台MQTT服务器,同时也作为一个客户端。

Docker搭建MQTT服务器

用的是EMQX的开源版。EMQX 是一款大规模可弹性伸缩的云原生分布式物联网 MQTT 消息服务器。它还有企业版和Cloud版,这些需要花钱的是企业级,自己测试、学习使用,用用开源版就行。
Docker也可以搭建EMQX企业版,就是连接的客户端有限制,只有10个。

EMQX官方文档:https://www.emqx.io/docs/zh/v4.3/ (左下角可以选择版本号)

1.拉取EMQX开源版镜像

官网:https://hub.docker.com/r/emqx/emqx/tags

1
docker pull emqx/emqx

不写版本写,就是最新版(latest)。

2.运行容器

1
docker run -d --name emqx -p 18084:1883 -p 18085:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx

–name emqx:容器名为emqx,可自定义
-p 18083:18083:端口映射,web端后台管理页端口,前面一个18083是本机端口,可自定义
-p 18084:1883:端口映射,MQTT TCP端口,前面一个18084是自定义的本机的端口,可自定义
-p 8883:8883:端口映射,MQTT TCP TLS/SSL 端口,前面一个8883可自定义
-p 8083:8083:端口映射,HTTP and WebSocket 端口,前面一个8083可自定义
-p 8084:8084:端口映射,HTTPS and WSS 端口,前面一个8084可自定义

如果有端口被限制不能使用啥的,直接换就行。如果是在服务器上使用,记得把防火墙设置一下,给允许下使用的端口就行。

1
2
3
4
5
# 容器运行后,查看容器
docker ps -a

# 进入容器,用/bin/sh
docker exec -it emqx /bin/sh

3.进入web后台管理页面

浏览器打开机器的ip:18083访问。比如本机ip为:192.168.1.101
那就打开:192.168.1.101:18083 访问,或者用127.0.0.1、localhost都行。服务器的话就用服务器的ip。

默认的账号:admin 密码:public

语言在【Settings】设置里,设一下中文就行。

4.Websocket测试

在【Tools】(工具)选项里有【Websocket】测试。
填写下ip和端口,这里的端口就是8083端口映射出来的端口,然后就直接【连接】就行。

可以订阅消息(填写Topic主题),和发送消息(填写Topic主题和消息内容)进行测试。

PS.如果是企业版,基本上操作差不多的。
官网:https://hub.docker.com/r/emqx/emqx-ee
拉取镜像:docker pull emqx/emqx-ee

  • 本文标题:Docker搭建MQTT服务器
  • 本文作者:HDUZN
  • 创建时间:2022-11-12 12:58:54
  • 本文链接:http://hduzn.cn/2022/11/12/Docker搭建MQTT服务器/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论