MQTT 5 经纪商 (EMQX) - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

MQTT 5 经纪商 (EMQX)

EMQX MQTT 代理组件 (aws.greengrass.clientdevices.mqtt.EMQX) 处理客户端设备和 Greengrass 核心设备之间的 MQTT 消息。此组件提供修改版的EMQX MQTT 5.0 经纪商. 部署此 MQTT 代理以在客户端设备和核心设备之间的通信中使用 MQTT 5 功能。有关如何选择 MQTT 代理的更多信息,请参阅选择一个 MQTT 经纪商.

该代理实现了 MQTT 5.0 协议。它包括对会话和消息过期间隔、用户属性、共享订阅、主题别名等的支持。MQTT 5 向后兼容 MQTT 3.1.1,所以如果你运行MOQUETTT 3.1.1 经纪商,您可以将其替换为 EMQX MQTT 5 代理,客户端设备可以继续正常连接和运行。

MQTT 5 功能仅限于核心设备和客户端设备之间的通信,因为Amazon IoT CoreMQTT 代理实现了 MQTT 3.1.1 协议。因此,当你使用MQTT 桥接组件在两者之间中继 MQTT 消息Amazon IoT Core而这个 MQTT 5 代理,消息使用 MQTT 3.1.1 而不是 MQTT 5。

注意

客户端设备是连接到 Greengrass 核心设备以发送 MQTT 消息和数据进行处理的本地 IoT 设备。有关更多信息,请参阅 与本地 IoT 设备互动

版本

此组件有以下版本:

  • 1.1.x

  • 1.0.x

类型

这个组件是通用组件 (aws.greengrass.generic)。这些区域有:Greengrass 核运行组件的生命周期脚本。

有关更多信息,请参阅 组件类型

操作系统

此组件可以安装在运行以下操作系统的核心设备上:

  • Linux

  • Windows

要求

此组件有以下要求:

  • 核心设备必须能够接受 MQTT 代理运行的端口上的连接。默认情况下,此组件在端口 8883 上运行 MQTT 代理。配置此组件时,您可以指定其他端口。

    如果您指定了不同的端口,并且使用MQTT 桥接组件要将 MQTT 消息中继到其他代理,必须使用 MQTT bridge v2.1.0 或更高版本。将其配置为使用 MQTT 代理运行的端口。

    如果您指定了不同的端口,并且使用IP 探测器组件要管理 MQTT 代理端点,必须使用 IP 检测器 v2.1.0 或更高版本。将其配置为报告 MQTT 代理运行的端口。

  • 在 Linux 核心设备上,在核心设备上安装和配置了 Docker:

    • Docker 引擎Greengrass 核心设备已安装 1.9.1 或更高版本。版本 20.10 是经过验证可与之配合使用的最新版本Amazon IoT Greengrass核心软件。在部署运行 Docker 容器的组件之前,必须直接在核心设备上安装 Docker。

    • 在您部署此组件之前,Docker 守护程序已启动并在核心设备上运行。

    • 运行此组件的系统用户必须具有 root 或管理员权限。或者,您可以以系统用户身份运行此组件docker对这个组件进行分组和配置requiresPrivileges可用false在没有权限的情况下运行 EQMX MQTT 代理。

附属物

部署组件时,Amazon IoT Greengrass还部署其依赖项的兼容版本。这意味着您必须满足组件及其所有依赖项的要求才能成功部署该组件。本部分列出了的附属物已发行的版本这个组件以及定义每个依赖项的组件版本的语义版本约束。您还可以在中查看组件的每个版本的依赖关系Amazon IoT Greengrass控制台. 在组件详细信息页面上,查找附属物列表。

下表列出了此组件版本 1.0.0 和 1.1.0 的附属物。

依赖关系 兼容的版本 附属物类型
客户端设备身份验证 >=2.0 <2.0 硬性

有关组件附属物的更多信息,请参阅组件配方参考.

配置

此组件提供以下配置参数,您可以在部署组件时自定义这些参数。

emqx

(可选)EMQX MQTT 经纪商使用的配置。您可以在此组件中配置 EMQX 配置选项的子集。

此对象包含以下信息:

listener.ssl.external

(可选)MQTT 代理运行的端口。

注意

如果您指定了不同的端口,并且使用MQTT 桥接组件要将 MQTT 消息中继到其他代理,必须使用 MQTT bridge v2.1.0 或更高版本。将其配置为使用 MQTT 代理运行的端口。

如果您指定了不同的端口,并且使用IP 探测器组件要管理 MQTT 代理端点,必须使用 IP 检测器 v2.1.0 或更高版本。将其配置为报告 MQTT 代理运行的端口。

默认值:8883

listener.ssl.external.max_connections

(可选)MQTT 代理支持的最大并行连接数。

默认值:1024000

listener.ssl.external.max_conn_rate

(可选)MQTT 代理每秒可以接收的最大新连接数。

默认值:500

listener.ssl.external.rate_limit

(可选)与 MQTT 代理的所有连接的带宽限制。指定该带宽的带宽和持续时间,用逗号分隔 (,) 采用以下格式:bandwidth,duration. 例如,您可以指定50KB,5s将 MQTT 代理限制为每 5 秒钟 50 千字节 (KB) 的数据。

listener.ssl.external.handshake_timeout

(可选)MQTT 代理等待完成新连接身份验证的时间。

默认值:15s

mqtt.max_packet_size

(可选)MQTT 消息的最大大小。

默认值:268435455(256 MB 减去 1)

log.level

(可选)MQTT 代理的日志级别。从以下选项中进行选择:

  • debug

  • info

  • notice

  • warning

  • error

  • critical

  • alert

  • emergency

默认日志级别为warning.

requiresPrivilege

(可选)在 Linux 核心设备上,您可以指定在没有 root 权限或管理员权限的情况下运行 EMQX MQTT 代理。如果将此选项设置为false,则运行此组件的系统用户必须是dockergroup。

默认值:true

startupTimeoutSeconds

(可选)EMQX MQTT 代理启动的最长时间(以秒为单位)。组件的状态更改为BROKEN如果超过这个超时时间。

默认值:90

ipcTimeoutSeconds

(可选)组件等待 Greengrass 核心响应进程间通信 (IPC) 请求的最长时间(以秒为单位)。如果此组件在检查客户端设备是否获得授权时报告超时错误,请增加此数字。

默认值:5

crtLogLevel

(可选)的日志级别Amazon通用运行时 (CRT) 库。

默认为 EMQX MQTT 代理日志级别 (log.levelemqx)。

restartIdentifier

(可选)配置此选项以重新启动 EMQX MQTT 代理。当此配置值发生变化时,此组件将重新启动 MQTT 代理。您可以使用此选项强制客户端设备断开连接。

dockerOptions

(可选)仅在 Linux 操作系统上配置此选项,以便向 Docker 命令行添加参数。例如,要映射其他端口,请使用-pDocker 参数:

"-p 1883:1883"
mergeConfigurationFiles

(可选)配置此选项以添加或覆盖指定的 EMQX 配置文件中的默认值。有关配置文件及其格式的信息,请参见配置在里面EMQX 4.0 文档. 您指定的值将附加到配置文件中。

以下示例将更新etc/emqx.conf文件。

"mergeConfigurationFiles": { "etc/emqx.conf": "broker.sys_interval=30s\nbroker.sys_heartbeat=10s" },

除了 EMQX 支持的配置文件外,Greengrass 还支持一个为 EMQX 配置 Greengrass 身份验证插件的文件,名为etc/plugins/aws_greengrass_emqx_auth.conf. 有两个支持的选项,auth_modeuse_greengrass_managed_certificates. 要使用其他身份验证提供商,请设置auth_mode可选择以下任一选项:

  • enabled—(默认)使用 Greengrass 身份验证和授权提供商。

  • bypass_on_failure— 使用 Greengrass 身份验证提供商,如果 Greengrass 拒绝身份验证或授权,则使用 EMQX 提供商链中所有剩余的身份验证提供商。

  • bypass— Greengrass 提供程序已禁用。然后,由 EMQX 提供商链处理身份验证和授权。

如果use_greengrass_managed_certificatestrue,此选项表示 Greengrass 管理代理的 TLS 证书。如果false,它表示您通过其他来源提供了证书。

以下示例将更新etc/plugins/aws_greengrass_emqx_auth.conf配置文件。

"mergeConfigurationFiles": { "etc/plugins/aws_greengrass_emqx_auth.conf": "auth_mode=enabled\n use_greengrass_managed_certificates=true\n" },
注意

aws.greengrass.clientdevices.mqtt.EMQX允许您配置安全敏感选项。其中包括 TLS 设置、身份验证和授权提供商。推荐的配置是使用双向 TLS 身份验证和 Greengrass 客户端设备身份验证提供商的默认配置。

replaceConfigurationFiles

(可选)配置此选项以替换指定的 EMQX 配置文件。您指定的值将替换整个现有配置文件。您无法指定etc/emqx.conf此部分中的文件。您必须使用mergeConfigurationFile修改etc/emqx.conf.

例 示例:配置合并更新

以下示例配置指定在端口 443 上运行 MQTT 代理。

{ "emqx": { "listener.ssl.external": "443", "listener.ssl.external.max_connections": "1024000", "listener.ssl.external.max_conn_rate": "500", "listener.ssl.external.rate_limit": "50KB,5s", "listener.ssl.external.handshake_timeout": "15s", "log.level": "warning" }, "requiresPrivilege": "true", "startupTimeoutSeconds": "90", "ipcTimeoutSeconds": "5" }

本地日志文件

此组件使用以下日志文件。

Linux
/greengrass/v2/logs/aws.greengrass.clientdevices.mqtt.EMQX.log
Windows
C:\greengrass\v2\logs\aws.greengrass.clientdevices.mqtt.EMQX.log

查看此组件的日志

  • 在核心设备上运行以下命令以实时查看此组件的日志文件。Replace(替换)/greengrass/v2要么C:\greengrass\v2with PathAmazon IoT Greengrass根文件夹。

    Linux
    sudo tail -f /greengrass/v2/logs/aws.greengrass.clientdevices.mqtt.EMQX.log
    Windows (PowerShell)
    Get-Content C:\greengrass\v2\logs\aws.greengrass.clientdevices.mqtt.EMQX.log -Tail 10 -Wait

许可证

在 Windows 操作系统上,该软件包括在微软软件许可条款——微软 Visual Studio 社区 2022. 下载此软件即表示您同意该代码的许可条款。

此组件发布于Greengrass 核心软件许可协议.

更改日志

下表说明组件的每个版本中所做的更改。

Version

更改

1.1.0

新功能
  • 添加了对包括代理选项和插件在内的 EMQX 配置的支持。

错误修复和改进
  • 将 EMQX 更新到版本 4.4.9。

1.0.1

修复了 TLS 握手期间导致某些 MQTT 客户端无法连接的问题。

1.0.0

初始版本。