MQTT消息服务器

 

 开源物联网 MQTT 5.0 服务器

目录

 

 开源物联网 MQTT 5.0 服务器

1、下载

2、配置文件修改

3、插件管理

4、授权认证

发布订阅 ACL

#ACL 插件

1、HTTP ACL

2、ACL 授权原理

3、HTTP 请求信息

4、superuser 请求

5、ACL 授权查询请求

6、请求说明


MQTT服务器选型开源的EMQ X消息服务器。EMQ X 消息服务器为大规模设备连接 (C1000K+) 的物联网、车联网、智能硬件、移动推送、移动消息等应用,提供完全开放源码、安装部署简便、企业级稳定可靠、可弹性扩展、易于定制开发的 MQTT 消息服务器。EMQ X 是开源社区中最流行的 MQTT 消息服务器。

EMQ X 基于 Erlang/OTP 平台开发的 MQTT 消息服务器。Erlang/OTP 是出色的软实时(Soft-Realtime)、低延时(Low-Latency)、分布式(Distributed) 的语言平台。MQTT 是轻量的(Lightweight)、发布订阅模式(PubSub) 的物联网消息协议。EMQ X 主要有以下的特点:

  • 单机支持十万并发连接,集群支持千万级连接;毫秒级消息转发;EMQ X 中应用了多种技术以实现上述功能:
  • 利用 Erlang/OTP 平台的软实时、高并发和容错
  • 全异步架构
  • 连接、会话、路由、集群的分层设计
  • 消息平面和控制平面的分离等
  • 支持 MQTT 5.0 协议,是 开源社区中第一个 支持 5.0 协议规范的消息服务器,并且完全兼容 MQTT V3.1 和 V3.1.1 协议。
  • 使用扩展模块和插件,提供了灵活的扩展机制,可以实现私有协议、认证鉴权、客户端状态查询和管理控制台等的扩展。
  • 基于 Apache 2.0 协议许可,完全开源。EMQ X 的代码都放在 Github (https://github.com/emqx/emqx)中,用户可以查看所有源代码。
  • MQTT Broker Cluster

1、下载

https://www.emqx.cn/downloads#broker

下载自己需要的版本

解压进入emqx/bin目录下:执行 ./emqx  start

执行成功会出现:

emqx 4.2.2 is started successfully!

./emqx status查看服务状态

Node ‘emqx@127.0.0.1’ is started

emqx v4.2.2 is running

2、配置文件修改

emqx/etc 下面有emqx.conf文件可以修改emqx的启动属性。

3、插件管理

进入官方管理页面默认:http://xxxx:18083/  账号密码:admin/public

启动以下插件:

emqx_auth_http.conf

emqx_dashboard

emqx_management.conf

emqx_web_hook

4、授权认证

发布订阅 ACL

发布订阅 ACL 指对 发布 (PUBLISH)/订阅 (SUBSCRIBE) 操作的 权限控制。例如拒绝用户名为 Anna 向 open/elsa/door 发布消息。

EMQ X 支持通过客户端发布订阅 ACL 进行客户端权限的管理,本章节介绍了 EMQ X 支持的发布订阅 ACL 以及对应插件的配置方法。

#ACL 插件

EMQ X 支持使用配置文件、外部主流数据库和自定义 HTTP API 作为 ACL 数据源。

连接数据源、进行访问控制功能是通过插件实现的,使用前需要启用相应的插件。

客户端订阅主题、发布消息时插件通过检查目标主题(Topic)是否在指定数据源允许/禁止列表内来实现对客户端的发布、订阅权限管理。

置文件/内置数据源

使用配置文件提供认证数据源,适用于变动较小的 ACL 管理。

外部数据库

外部数据库可以存储大量数据、动态管理 ACL,方便与外部设备管理系统集成。

其他

HTTP ACL 能够实现复杂的 ACL 管理。

1、HTTP ACL

HTTP 认证使用外部自建 HTTP 应用认证授权数据源,根据 HTTP API 返回的数据判定授权结果,能够实现复杂的 ACL 校验逻辑。

插件:

emqx_auth_http

2、ACL 授权原理

EMQ X 在设备发布、订阅事件中使用当前客户端相关信息作为参数,向用户自定义的认证服务发起请求权限,通过返回的 HTTP 响应状态码 (HTTP statusCode) 来处理 ACL 授权请求。

  • 无权限:API 返回 4xx 状态码
  • 授权成功:API 返回 200 状态码
  • 忽略授权:API 返回 200 状态码且消息体 ignore

 

3、HTTP 请求信息

HTTP API 基础请求信息,配置证书、请求头与重试规则。

# etc/plugins/emqx_auth_http.conf

## 启用 HTTPS 所需证书信息
## auth.http.ssl.cacertfile = etc/certs/ca.pem

## auth.http.ssl.certfile = etc/certs/client-cert.pem

## auth.http.ssl.keyfile = etc/certs/client-key.pem

## 请求头设置
## auth.http.header.Accept = */*

## 重试设置
auth.http.request.retry_times = 3

auth.http.request.retry_interval = 1s

auth.http.request.retry_backoff = 2.0

 

进行发布、订阅认证时,EMQ X 将使用当前客户端信息填充并发起用户配置的 ACL 授权查询请求,查询出该客户端在 HTTP 服务器端的授权数据。

4、superuser 请求

首先查询客户端是否为超级用户,客户端为超级用户时将跳过 ACL 查询。

# etc/plugins/emqx_auth_http.conf

## 请求地址
auth.http.super_req = http://127.0.0.1:8991/mqtt/superuser

## HTTP 请求方法
## Value: post | get | put
auth.http.super_req.method = post

## 请求参数
auth.http.super_req.params = clientid=%c,username=%u

 

5、ACL 授权查询请求

# etc/plugins/emqx_auth_http.conf

## 请求地址
auth.http.acl_req = http://127.0.0.1:8991/mqtt/acl

## HTTP 请求方法
## Value: post | get | put
auth.http.acl_req.method = get

## 请求参数
auth.http.acl_req.params = access=%A,username=%u,clientid=%c,ipaddr=%a,topic=%t,mountpoint=%m

 

6、请求说明

HTTP 请求方法为 GET 时,请求参数将以 URL 查询字符串的形式传递;POST、PUT 请求则将请求参数以普通表单形式提交(content-type 为 x-www-form-urlencoded)。

你可以在认证请求中使用以下占位符,请求时 EMQ X 将自动填充为客户端信息:

  • %A:操作类型,'1' 订阅;'2' 发布
  • %u:客户端用户名
  • %c:Client ID
  • %a:客户端 IP 地址
  • %r:客户端接入协议
  • %m:Mountpoint
  • %t:主题
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值