

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

# 在组件中与客户端设备交互
<a name="interact-with-client-devices-in-components"></a>

您可以开发自定义 Greengrass 组件，与连接到核心设备的客户端设备交互。例如，您可以开发能执行以下操作的组件：
+ 处理来自客户端设备的 MQTT 消息并将数据发送到 Amazon Web Services 云 目的地。
+ 将 MQTT 消息发送到客户端设备以启动操作。

客户端设备通过核心设备上运行的 MQTT 代理组件与核心设备连接和通信。默认情况下，客户端设备只能通过 MQTT 相互通信，而 Greengrass 组件无法接收这些 MQTT 消息，也无法向客户端设备发送消息。

Greengrass 组件使用[本地发布/订阅接口](ipc-publish-subscribe.md)在核心设备上进行通信。要在 Greengrass 组件中与客户端设备通信，请将 [MQTT 网桥组件](mqtt-bridge-component.md)配置为执行以下操作：
+ 将 MQTT 消息从客户端设备中继到本地发布/订阅。
+ 将 MQTT 消息从本地传送 publish/subscribe 到客户端设备。

您还可以在 Greengrass 组件中与客户端设备影子交互。有关更多信息，请参阅 [与客户端设备影子进行交互并进行同步](work-with-client-device-shadows.md)。

**Topics**
+ [配置并部署 MQTT 网桥组件](#deploy-mqtt-bridge-pubsub)
+ [接收来自客户端设备的 MQTT 消息](#receive-client-device-messages)
+ [将 MQTT 消息发送到客户端设备](#send-client-device-messages)

## 配置并部署 MQTT 网桥组件
<a name="deploy-mqtt-bridge-pubsub"></a>

MQTT 网桥组件使用一系列主题映射，其中每个主题映射都指定一个消息源和一个消息目标。要与客户端设备通信，请部署 MQTT 网桥组件，并在组件配置中指定每个源和目标主题。

<a name="create-mqtt-bridge-deployment-info"></a>要将 MQTT 网桥组件部署到一台或一组核心设备，请[创建包含 `aws.greengrass.clientdevices.mqtt.Bridge` 组件的部署](create-deployments.md)。在部署的 MQTT 网桥组件配置中指定主题映射 `mqttTopicMapping`。

以下示例定义了一个部署，该部署将 MQTT 网桥组件配置为将`clients/MyClientDevice1/hello/world`主题从客户端设备中继到本地 publish/subscribe 代理。`merge` 配置更新需要序列化 JSON 对象。有关更多信息，请参阅 [更新组件配置](update-component-configurations.md)。

------
#### [ Console ]

```
{
  "mqttTopicMapping": {
    "HelloWorldPubsub": {
      "topic": "clients/MyClientDevice1/hello/world",
      "source": "LocalMqtt",
      "target": "Pubsub"
    }
  }
}
```

------
#### [ Amazon CLI ]

```
{
  "components": {
    "aws.greengrass.clientdevices.mqtt.Bridge": {
      "version": "2.0.0",
      "configurationUpdate": {
        "merge": "\"mqttTopicMapping\":{\"HelloWorldPubsub\":{\"topic\":\"clients/MyClientDevice1/hello/world\",\"source\":\"LocalMqtt\",\"target\":\"Pubsub\"}}}"
      }
    }
    ...
  }
}
```

------

您可以使用 MQTT 主题通配符，中继与主题筛选条件匹配的主题上的消息。如果您使用 MQTT 网桥 v2.2.0 或更高版本，则当源代理为本地发布/订阅时，您可以在主题筛选条件中使用 MQTT 主题通配符。有关更多信息，请参阅 [MQTT 网桥组件配置](mqtt-bridge-component.md#mqtt-bridge-component-configuration)。

## 接收来自客户端设备的 MQTT 消息
<a name="receive-client-device-messages"></a>

您可以订阅您为 MQTT 网桥组件配置的本地 publish/subscribe 主题，以接收来自客户端设备的消息。

**在自定义组件中接收来自客户端设备的 MQTT 消息**

1. [配置和部署 MQTT 网桥组件](#deploy-mqtt-bridge-pubsub)，将来自客户端设备发布的 MQTT 主题的消息中继到本地 publish/subscribe 主题。

1. 使用本地 publish/subscribe IPC 接口订阅 MQTT 网桥中继消息的主题。有关更多信息，请参阅[发布/订阅本地消息](ipc-publish-subscribe.md)和[SubscribeToTopic](ipc-publish-subscribe.md#ipc-operation-subscribetotopic)。

[连接并测试客户端设备教程](client-devices-tutorial.md)包括一个您可以在其中开发一个组件用于订阅来自客户端设备的消息的部分。有关更多信息，请参阅 [第 4 步：开发与客户端设备通信的组件](client-devices-tutorial.md#develop-client-device-subscriber-component)。

## 将 MQTT 消息发送到客户端设备
<a name="send-client-device-messages"></a>

您可以发布到您为 MQTT 网桥组件配置的本地 publish/subscribe 主题，以便向客户端设备发送消息。

**在自定义组件中将 MQTT 消息发送到客户端设备**

1. [配置和部署 MQTT 桥接组件](#deploy-mqtt-bridge-pubsub)，将来自本地 publish/subscribe 主题的消息中继到客户端设备订阅的 MQTT 主题。

1. 使用本地 publish/subscribe IPC 接口发布到 MQTT 网桥中继消息的主题。有关更多信息，请参阅[发布/订阅本地消息](ipc-publish-subscribe.md)和[PublishToTopic](ipc-publish-subscribe.md#ipc-operation-publishtotopic)。