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

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

MQT 桥

MQTT 桥接组件 (aws.greengrass.clientdevices.mqtt.Bridge) 在客户端设备、本地 Greengrass 发布/订阅和之间中继 MQTT 消息Amazon IoT Core。您可以使用此组件在自定义组件中处理来自客户端设备的 MQTT 消息,并将客户端设备与同步Amazon Web Services 云。

注意

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

您可以使用此组件在以下消息代理之间中继消息:

  • 本地 MQTT — 本地 MQTT 代理处理客户端设备和核心设备之间的消息。

  • 本地发布/订阅-本地 Greengrass 消息代理处理核心设备上组件之间的消息。有关如何在 Greengrass 组件中与这些消息进行交互的更多信息,请参阅发布/订阅本地消息

  • Amazon IoT Core—Amazon IoT Core MQTT 代理处理IoT 设备和Amazon Web Services 云目的地之间的消息。有关如何在 Greengrass 组件中与这些消息进行交互的更多信息,请参阅发布/订阅Amazon IoT Core MQTT 消息

    注意

    MQTT 桥使用 QoS 1 发布和订阅Amazon IoT Core本地 MQTT 代理,即使客户端设备使用 QoS 0 发布和订阅本地 MQTT 代理。因此,当您将来自本地 MQTT 代理上的客户端设备的 MQTT 消息中继到时,您可能会发现额外的延迟Amazon IoT Core。有关核心设备上的 MQT 配置的更多信息,请参阅配置 MQTT 超时和缓存设置

版本

此组件有以下版本:

  • 2.2.x

  • 2.1.x

  • 2.0.x

类型

这个组件是一个插件组件 (aws.greengrass.plugin)。Greengrass 核心在与核心相同的 Java 虚拟机 (JVM) 中运行此组件。当您在核心设备上更改此组件的版本时,nucleus 会重新启动。

此组件使用与 Greengrass 核相同的日志文件。有关更多信息,请参阅监控Amazon IoT Greengrass日志

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

操作系统

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

  • Linux

  • Windows

要求

此组件有以下要求:

  • 如果您将核心设备的 MQTT 代理组件配置为使用默认端口 8883 以外的端口,则必须使用 MQTT bridge v2.1.0 或更高版本。将其配置为连接代理运行的端口。

附属物

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

2.2.3

下表列出了此组件版本 2.2 的依赖关系。

依赖关系 兼容的版本 依赖关系类型
客户端设备身份验证 >=2.0 <2.4.0 硬性
2.2.0 – 2.2.2

下表列出了此组件版本 2.2.0 到 2.2.2 的依赖关系。

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

下表列出了此组件版本 2.1.1 的依赖关系。

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

下表列出了此组件版本 2.0.0 到 2.1.0 的依赖关系。

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

有关组件依赖关系的更多信息,请参阅组件配方参考

配置

此组件提供以下配置参数,您可以在部署组件时对其进行自定义。

2.2.x
mqttTopicMapping

您要桥接的主题映射。此组件订阅有关源主题的消息,并将其收到的消息发布到目标主题。每个主题映射都定义了主题、源类型和目标类型。

此对象包含以下信息:

topicMappingNameKey

此主题映射的名称。将 topicMappingNameKey 替换为可帮助您识别此主题映射的名称。

此对象包含以下信息:

topic

用于在来源和目标经纪人之间架起桥梁的主题或主题过滤器。

您可以使用+# MQTT 主题通配符来中继与主题过滤器匹配的所有主题的消息。有关更多信息,请参阅《Amazon IoT Core开发者指南》中的 MQTT 主题

注意

要在Pubsub源代理中使用 MQTT 主题通配符,必须使用 Greengrass 核心组件的 v2.6.0 或更高版本。

targetTopicPrefix

此组件中继消息时要添加到目标主题的前缀。

source

源消息代理。从以下选项中进行选择:

  • LocalMqtt— 客户端设备通信的本地 MQTT 代理。

  • Pubsub— 当地的 Greengrass 发布/订阅消息经纪人。

  • IotCore— MAmazon IoT Core QTT 消息代理。

    注意

    MQTT 桥使用 QoS 1 发布和订阅Amazon IoT Core本地 MQTT 代理,即使客户端设备使用 QoS 0 发布和订阅本地 MQTT 代理。因此,当您将来自本地 MQTT 代理上的客户端设备的 MQTT 消息中继到时,您可能会发现额外的延迟Amazon IoT Core。有关核心设备上的 MQT 配置的更多信息,请参阅配置 MQTT 超时和缓存设置

source并且target必须不同。

target

目标消息代理。从以下选项中进行选择:

  • LocalMqtt— 客户端设备通信的本地 MQTT 代理。

  • Pubsub— 当地的 Greengrass 发布/订阅消息经纪人。

  • IotCore— MAmazon IoT Core QTT 消息代理。

    注意

    MQTT 桥使用 QoS 1 发布和订阅Amazon IoT Core本地 MQTT 代理,即使客户端设备使用 QoS 0 发布和订阅本地 MQTT 代理。因此,当您将来自本地 MQTT 代理上的客户端设备的 MQTT 消息中继到时,您可能会发现额外的延迟Amazon IoT Core。有关核心设备上的 MQT 配置的更多信息,请参阅配置 MQTT 超时和缓存设置

source并且target必须不同。

brokerUri

(可选)本地 MQTT 代理的 URI。如果您将 MQTT 代理配置为使用与默认端口 8883 不同的端口,则必须指定此参数。使用以下格式,将 por t 替换为 MQTT 代理运行的端口:ssl://localhost:port

默认值:ssl://localhost:8883

例 示例:配置合并更新

以下示例配置更新可指定以下内容:

  • 将来自客户端设备的消息中继到与Amazon IoT Core主题过滤器匹配clients/+/hello/world的主题。

  • 将来自客户端设备的消息中继到与主题过滤器匹配的clients/+/detections主题的本地发布/订阅,并将events/input/前缀添加到目标主题。生成的目标主题与events/input/clients/+/detections主题过滤器相匹配。

  • 将来自客户端设备的消息中继到Amazon IoT Core与主题过滤器匹配的主clients/+/status题,并将$aws/rules/StatusUpdateRule/前缀添加到目标主题。此示例使用 B asic Ingest 将这些消息直接中继StatusUpdateRule到名为降低成本的Amazon IoT规则

{ "mqttTopicMapping": { "ClientDeviceHelloWorld": { "topic": "clients/+/hello/world", "source": "LocalMqtt", "target": "IotCore" }, "ClientDeviceEvents": { "topic": "clients/+/detections", "targetTopicPrefix": "events/input/", "source": "LocalMqtt", "target": "Pubsub" }, "ClientDeviceCloudStatusUpdate": { "topic": "clients/+/status", "targetTopicPrefix": "$aws/rules/StatusUpdateRule/", "source": "LocalMqtt", "target": "IotCore" } } }
2.1.x
mqttTopicMapping

您要桥接的主题映射。此组件订阅有关源主题的消息,并将其收到的消息发布到目标主题。每个主题映射都定义了主题、源类型和目标类型。

此对象包含以下信息:

topicMappingNameKey

此主题映射的名称。将 topicMappingNameKey 替换为可帮助您识别此主题映射的名称。

此对象包含以下信息:

topic

用于在来源和目标经纪人之间架起桥梁的主题或主题过滤器。

如果您指定LocalMqttIotCore源代理,则可以使用+# MQTT 主题通配符来中继与主题筛选条件匹配的所有主题的消息。有关更多信息,请参阅《Amazon IoT Core开发者指南》中的 MQTT 主题

source

源消息代理。从以下选项中进行选择:

  • LocalMqtt— 客户端设备通信的本地 MQTT 代理。

  • Pubsub— 当地的 Greengrass 发布/订阅消息经纪人。

  • IotCore— MAmazon IoT Core QTT 消息代理。

    注意

    MQTT 桥使用 QoS 1 发布和订阅Amazon IoT Core本地 MQTT 代理,即使客户端设备使用 QoS 0 发布和订阅本地 MQTT 代理。因此,当您将来自本地 MQTT 代理上的客户端设备的 MQTT 消息中继到时,您可能会发现额外的延迟Amazon IoT Core。有关核心设备上的 MQT 配置的更多信息,请参阅配置 MQTT 超时和缓存设置

source并且target必须不同。

target

目标消息代理。从以下选项中进行选择:

  • LocalMqtt— 客户端设备通信的本地 MQTT 代理。

  • Pubsub— 当地的 Greengrass 发布/订阅消息经纪人。

  • IotCore— MAmazon IoT Core QTT 消息代理。

    注意

    MQTT 桥使用 QoS 1 发布和订阅Amazon IoT Core本地 MQTT 代理,即使客户端设备使用 QoS 0 发布和订阅本地 MQTT 代理。因此,当您将来自本地 MQTT 代理上的客户端设备的 MQTT 消息中继到时,您可能会发现额外的延迟Amazon IoT Core。有关核心设备上的 MQT 配置的更多信息,请参阅配置 MQTT 超时和缓存设置

source并且target必须不同。

brokerUri

(可选)本地 MQTT 代理的 URI。如果您将 MQTT 代理配置为使用与默认端口 8883 不同的端口,则必须指定此参数。使用以下格式,将 por t 替换为 MQTT 代理运行的端口:ssl://localhost:port

默认值:ssl://localhost:8883

例 示例:配置合并更新

以下示例配置更新指定将来自客户端设备的消息中继到Amazon IoT Coreclients/MyClientDevice1/hello/worldclients/MyClientDevice2/hello/world主题。

{ "mqttTopicMapping": { "ClientDevice1HelloWorld": { "topic": "clients/MyClientDevice1/hello/world", "source": "LocalMqtt", "target": "IotCore" }, "ClientDevice2HelloWorld": { "topic": "clients/MyClientDevice2/hello/world", "source": "LocalMqtt", "target": "IotCore" } } }
2.0.x
mqttTopicMapping

您要桥接的主题映射。此组件订阅有关源主题的消息,并将其收到的消息发布到目标主题。每个主题映射都定义了主题、源类型和目标类型。

此对象包含以下信息:

topicMappingNameKey

此主题映射的名称。将 topicMappingNameKey 替换为可帮助您识别此主题映射的名称。

此对象包含以下信息:

topic

用于在来源和目标经纪人之间架起桥梁的主题或主题过滤器。

如果您指定LocalMqttIotCore源代理,则可以使用+# MQTT 主题通配符来中继与主题筛选条件匹配的所有主题的消息。有关更多信息,请参阅《Amazon IoT Core开发者指南》中的 MQTT 主题

source

源消息代理。从以下选项中进行选择:

  • LocalMqtt— 客户端设备通信的本地 MQTT 代理。

  • Pubsub— 当地的 Greengrass 发布/订阅消息经纪人。

  • IotCore— MAmazon IoT Core QTT 消息代理。

    注意

    MQTT 桥使用 QoS 1 发布和订阅Amazon IoT Core本地 MQTT 代理,即使客户端设备使用 QoS 0 发布和订阅本地 MQTT 代理。因此,当您将来自本地 MQTT 代理上的客户端设备的 MQTT 消息中继到时,您可能会发现额外的延迟Amazon IoT Core。有关核心设备上的 MQT 配置的更多信息,请参阅配置 MQTT 超时和缓存设置

source并且target必须不同。

target

目标消息代理。从以下选项中进行选择:

  • LocalMqtt— 客户端设备通信的本地 MQTT 代理。

  • Pubsub— 当地的 Greengrass 发布/订阅消息经纪人。

  • IotCore— MAmazon IoT Core QTT 消息代理。

    注意

    MQTT 桥使用 QoS 1 发布和订阅Amazon IoT Core本地 MQTT 代理,即使客户端设备使用 QoS 0 发布和订阅本地 MQTT 代理。因此,当您将来自本地 MQTT 代理上的客户端设备的 MQTT 消息中继到时,您可能会发现额外的延迟Amazon IoT Core。有关核心设备上的 MQT 配置的更多信息,请参阅配置 MQTT 超时和缓存设置

source并且target必须不同。

例 示例:配置合并更新

以下示例配置更新指定将来自客户端设备的消息中继到Amazon IoT Coreclients/MyClientDevice1/hello/worldclients/MyClientDevice2/hello/world主题。

{ "mqttTopicMapping": { "ClientDevice1HelloWorld": { "topic": "clients/MyClientDevice1/hello/world", "source": "LocalMqtt", "target": "IotCore" }, "ClientDevice2HelloWorld": { "topic": "clients/MyClientDevice2/hello/world", "source": "LocalMqtt", "target": "IotCore" } } }

本地日志文件

此组件使用与 Greengrass 核心组件相同的日志文件。

Linux
/greengrass/v2/logs/greengrass.log
Windows
C:\greengrass\v2\logs\greengrass.log
查看此组件的日志
  • 在核心设备上运行以下命令以实时查看此组件的日志文件。将 /greengrass/v2C:\greengrass\v2 替换为Amazon IoT Greengrass根文件夹的路径。

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

更改日志

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

Version

变更

2.2.4

Greengrass 客户端设备身份验证组件版本 2.3.0 的版本更新。

2.2.3

此版本包含错误修复和改进。

2.2.2

错误修复和改进
  • 记录调整。

2.2.1

错误修复和改进

修复可能导致 MQT 桥无法订阅 MQTT 主题的问题。

2.2.0

新功能
  • 当您将本地发布/订阅指定为源消息代理时,增加对 MQTT 主题通配符(#+)的支持。

    此功能需要 v2.6.0 或更高版本的 Greengrass 核心组件

  • 添加了targetTopicPrefix选项,您可以指定该选项来配置 MQTT 桥,使其在中继消息时向目标主题添加前缀。

2.1.1

错误修复和改进
  • 修复了此组件如何处理配置重置更新的问题。

  • 降低证书轮换时 MQTT 客户端断开连接的频率。

2.1.0

新功能
  • 添加brokerUri参数,使您能够使用非默认 MQTT 代理端口。

2.0.1

此版本包括错误修复和改进。

2.0.0

初始版本。