MQTT使用说明及EMQ-X部署

2019-11-26  本文已影响0人  Mr_Michael

一、MQTT 简介

MQTT协议(Message Queuing Telemetry Transport),叫做遥信消息队列传输。 是工作在TCP/IP协议族上的一种轻量级的发布/订阅协议,需要最小的占用空间和带宽来连接 IoT 设备。与 HTTP 的请求/响应范式不同,MQTT 是事件驱动的,可以将消息推送到客户端。这种类型的架构将客户端彼此解耦,以实现高度可扩展的解决方案,而数据生产者和数据消费者之间没有依赖关系。

1.MQTT 的主要优点

2.MQTT 的基本概念

MQTT 的核心是MQTT 代理MQTT 客户端。代理负责在发送方和合法接收方之间分发消息。MQTT 客户端向代理发布消息,其他客户端可以订阅该代理以接收消息。每个 MQTT 消息都包含一个主题。客户端向特定主题发布消息,MQTT 客户端订阅他们想要接收的主题。MQTT 代理使用主题和订阅者列表将消息分派到适当的客户端。

image

MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:

MQTT 代理能够缓冲无法分派到未连接的 MQTT 客户端的消息。这对于网络连接不可靠的情况非常有用。为了支持可靠的消息传递,该协议支持 3 种不同类型的服务质量消息:0 - 最多一次,1 - 至少一次,2 - 恰好一次。

1)MQTT 客户端

一个使用MQTT协议的应用程序或者设备,它总是建立到服务器的网络连接。

MQTT 客户端生命周期

Client libraries

C

C++

Go

Python

2)MQTT 代理

MQTT服务器以称为"消息代理"(Broker),可以是一个应用程序或一台设备。它是位于消息发布者和订阅者之间。

MQTT代理可以:

(1)接受来自客户的网络连接;

(2)接受客户发布的应用信息;

(3)处理来自客户端的订阅和退订请求;

(4)向订阅的客户转发应用程序消息。

如果需要下载MQTT服务器,可以直接去MQTT Software下载MQTT协议衍生出来的各个不同版本。

常用Servers/ Brokers

3)MQTT协议中的订阅、主题、会话

4)连接方式

MQTT客户端与代理可以基于MQTT-TCP或MQTT-WebSocket协议建立连接。

image

二、EMQ X Broker使用

1.安装EMQ X

# 1.Shell 脚本一键安装 (Linux)
wget https://repos.emqx.io/install_emqx.sh 
sudo bash install_emqx.sh

# 2.或者手动安装
# 安装所需要的依赖包
$ sudo apt update && sudo apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
# 添加 EMQ X 的官方 GPG 密钥
$ curl -fsSL https://repos.emqx.io/gpg.pub | sudo apt-key add -
# 验证密钥
$ sudo apt-key fingerprint 3E640D53
pub   rsa2048 2019-04-10 [SC]
    FC84 1BA6 3775 5CA8 487B  1E3C C0B4 0946 3E64 0D53
uid           [ unknown] emqx team <support@emqx.io>
# 添加存储库
$ sudo add-apt-repository \
    "deb [arch=amd64] https://repos.emqx.io/emqx-ce/deb/ubuntu/ \
    ./$(lsb_release -cs) \
    stable"
$ sudo apt update
$ sudo apt install emqx

安装目录说明

$ tree /var/lib/emqx/
/var/lib/emqx/
├── configs
│   ├── app.2021.09.16.19.06.05.config
│   ├── app.2021.09.16.20.07.27.config
│   ├── vm.2021.09.16.19.06.05.args
│   └── vm.2021.09.16.20.07.27.args
├── emqx_erl_pipes
│   └── emqx@127.0.0.1
│       ├── erlang.pipe.1.r
│       └── erlang.pipe.1.w
├── loaded_modules
├── loaded_plugins
├── mnesia
│   └── emqx@127.0.0.1
│       ├── DECISION_TAB.LOG
│       ├── emqx_activated_alarm.DCD
│       ├── emqx_activated_alarm.DCL
│       ├── emqx_banned.DCD
│       ├── emqx_deactivated_alarm.DCD
│       ├── emqx_mod_delayed.DCD
│       ├── emqx_resource.DCD
│       ├── emqx_rule.DCD
│       ├── emqx_telemetry.DCD
│       ├── emqx_telemetry.DCL
│       ├── LATEST.LOG
│       ├── mqtt_admin.DCD
│       ├── mqtt_admin.DCL
│       ├── mqtt_app.DCD
│       ├── mqtt_app.DCL
│       └── schema.DAT
├── patches
└── scripts

$ tree /usr/lib/emqx/ -L 1
/usr/lib/emqx/
├── bin
├── erts-11.1.8
├── lib
└── releases

$ tree /etc/emqx/ -L 1
/etc/emqx/
├── acl.conf        # EMQ X 默认 ACL 规则配置文件
├── certs
├── emqx.conf    # EMQ X 配置文件
├── lwm2m_xml
├── plugins     # EMQ X 扩展插件配置文件
├── psk.txt
├── ssl_dist.conf
└── vm.args

2.使用EMQ X Broker

1)启用EMQ X

# 直接启动
$ sudo emqx start
EMQ X Broker 4.3.5 is started successfully!
# 或
$ sudo systemctl start emqx

# 查看 EMQ X 的状态
$ sudo emqx_ctl status
Node 'emqx@127.0.0.1' 4.3.5 is started

# 停止 EMQ X Broker
$ emqx stop
ok

2)EMQ X TCP服务器

基于/etc/emqx/emqx.conf可以,emqx tcp服务默认监听0.0.0.0:1883,WebSocket服务监听8083。参考详细配置说明

##--------------------------------------------------------------------
## MQTT/TCP - External TCP Listener for MQTT Protocol

## listener.tcp.$name is the IP address and port that the MQTT/TCP
## listener will bind.
##
## Value: IP:Port | Port
##
## Examples: 1883, 127.0.0.1:1883, ::1:1883
listener.tcp.external = 0.0.0.0:1883

##--------------------------------------------------------------------
## External WebSocket listener for MQTT protocol

## listener.ws.$name is the IP address and port that the MQTT/WebSocket
## listener will bind.
##
## Value: IP:Port | Port
##
## Examples: 8083, 127.0.0.1:8083, ::1:8083
listener.ws.external = 8083

3)Dashboard

访问 http://localhost:18083 。默认用户名是 admin,密码是 public。

导航项目 说明
MONITORING 提供了服务端与客户端监控信息的展示页面
RULE ENGINE 提供了规则引擎的可视化操作页面
MANAGEMENT 提供了扩展插件与应用的管理页面
TOOLS 提供了 WebSocket 客户端工具以及 HTTP API 速查页面
ADMIN 提供了 Dashboard 用户管理和显示设置等页面

3.EMQ X 客户端

不同语言可以使用各自的的libraries来实现。

1)MQTT Python 客户端

sudo pip install paho-mqtt

基于TCP连接emqx broker,发布emqtt,订阅testtopic

import paho.mqtt.client as mqtt

# 连接成功回调
def on_connect(client, userdata, flags, rc):
    print('Connected with result code '+str(rc))
    client.subscribe('testtopic/#')

# 消息接收回调
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()

# 指定回调函数
client.on_connect = on_connect
client.on_message = on_message

# 建立连接
client.connect('broker.emqx.io', 1883, 60)
# 发布消息
client.publish('emqtt',payload='Hello World',qos=0)

client.loop_forever()

执行

python3 emqx-test.py
上一篇 下一篇

猜你喜欢

热点阅读