# 外部节点

所使用的外部节点用于与外部系统进行交互。

### AWS SNS Node

外部节点指用来与外部系统交互的节点 AWS SNS (Amazon Simple Notification Service).

配置:

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPcjqUPNBH1_fpD0Mdl%2Fimage.png?alt=media\&token=5804c542-14be-4136-b0ab-88c627fb5fc6)

* **Topic ARN pattern** - 可以为消息发布设置直接主题名，也可以使用模式，使用消息元数据将其解析为真正的主题名.
* **AWS Access Key ID** and **AWS Secret Access Key** 是具有编程访问权限的AWS IAM用户凭据。更多关于AWS访问密钥的信息，请访问[这里](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)找到。
* **AWS Region** 必须对应于创建SNS主题的区域。AWS区域当前列表可以在[这里](http://docs.aws.amazon.com/general/latest/gr/rande.html)找到。

在下面的例子中，主题名取决于设备类型，在元数据中有一条消息包含**deviceType**字段

```
{
    deviceType: controller
}
```

我们将在**Topic ARN pattern**中设置**controller**的topic中发布消息:

```
arn:aws:sns:us-east-1:123456789012:${deviceType}
```

在运行时，模式将解析为 `arn:aws:sns:us-east-1:123456789012:controller`

**Published payload** - —节点将向SNS发布完整的有效消息负载。如果有需要的话，可以配置规则链，使用转换节点链向SNS发送正确的负载。

**Outbound message** 将包含消息元数据中的响应**messageId**和**requestId**。原始消息有效负载、类型和发送方不会被更改。

### AWS SQS Node

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPcjnUmWmh7nWpEWAfL%2Fimage.png?alt=media\&token=48808674-e87d-4846-aa0b-c5f6854ce1df)

节点将消息发布到AWS SQS (亚马逊简单队列服务)。

配置:

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPcjkxWrgGT-lZbwQEJ%2Fimage.png?alt=media\&token=cf5b8824-40b4-4132-b249-028d1d9367e9)

* **Queue Type** -SQS队列类型可以是*Standard*，也可以是先进先出类型*FIFO*.
* **Queue URL Pattern** - 用于构建队列URL的模式。例如,`${deviceType}`。可以为消息发布设置直接队列URL，或使用模式，使用消息元数据将该模式解析为真正的队列URL。
* **Delay** - 以秒为单位的延迟，用于延迟特定的消息.
* **Message attributes** - 可选的要发布的消息属性列表.
* **AWS Access Key ID** and **AWS Secret Access Key** 是具有编程访问权限的AWS IAM用户的凭证。可以在[此处](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)找到有关AWS访问密钥的更多信息
* **AWS Region** 必须与创建SQS队列的区域相对应。可在[此处](http://docs.aws.amazon.com/general/latest/gr/rande.html)找到AWS区域的最新列表。

在以下示例中，队列URL取决于设备类型，并且在元数据中有一个包含 **deviceType** 字段的消息:

```
{
    deviceType: controller
}
```

为了在 **controller**’s 的Queue中发布消息，我们将在**Queue URL pattern**模式中设置此模式:

```
https://sqs.us-east-1.amazonaws.com/123456789012/${deviceType}
```

在运行时，模式将解析为`https://sqs.us-east-1.amazonaws.com/123456789012/controller`

**Published body** - 节点将向SQS发布完整的消息有效负载。如果需要，可以将规则链配置为使用转换节点链，以将正确的有效负载发送到SQS。

**Published attributes** - 可以添加可选的属性列表以在SQS中发布消息。这是一个集合 – 对。NAME和VALUE都可以是静态值或模式，可以使用消息元数据进行解析。

如果选择了**FIFO**队列，则消息ID将用作重复数据**deduplication ID**，消息发起者将用作**group ID**。

**Outbound message** 这个节点的出站消息将包含消息元数据中的响应 **messageId**, **requestId**, **messageBodyMd5**, **messageAttributesMd5** 和 **sequenceNumber** 原始消息payload、类型和发送方不会被更改。

### Kafka Node

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPcjiRyw-jKqt0u4gLo%2Fimage.png?alt=media\&token=a8415dae-b6f6-4885-99ff-ff49c3d871bb)

Kafka节点向Kafka代理发送消息。消息可具有任何消息类型。将通过Kafka生产者发送记录到Kafka服务器.

配置:

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPcjh4kgET-SFzNh-BH%2Fimage.png?alt=media\&token=9060801d-f9c1-48f7-ac85-9c819cbc9daa)

* **Topic pattern** - 可以是静态字符串，也可以是使用消息元数据属性解析的模式。例如`${deviceType}`
* **bootstrap servers** - 用逗号分隔的kafka代理列表.
* **Automatically retry times** - 如果连接失败，尝试重发消息的次数.
* **Produces batch size** - 以字节为单位的批处理大小，用于对具有相同分区的消息进行分组.
* **Time to buffer locally** - ms中最大的本地缓冲窗口持续时间.
* **Client buffer max size** - 发送消息的最大缓冲区大小(以字节为单位).
* **Number of acknowledgments** - 确认节点在考虑请求完成之前需要接收的数量.
* **Key serializer** - 默认是org.apache.kafka.common.serialization.StringSerializer
* **Value serializer** - 默认是org.apache.kafka.common.serialization.StringSerializer
* **Other properties** - 可以为kafka代理连接提供任何其他属性.

**Published body** - Node将向Kafka主题发送完整的消息负载。如果需要可以配置规则链，使用转换节点链向Kafka发送正确的payload.

**Outbound message** 此节点的出站消息将在消息元数据中包含响应**offset**, **partition** and **topic**属性。原始消息payload、类型和发送方不会被更改。

**注意**-如果您要将[Confluent cloud](https://confluent.cloud/)用作kafka代理，则应添加下一个属性：

| 键                                     | 值                                                                                                                          |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| ssl.endpoint.identification.algorithm | https                                                                                                                      |
| sasl.mechanism                        | PLAIN                                                                                                                      |
| sasl.jaas.config                      | org.apache.kafka.common.security.plain.PlainLoginModule必需username =“ CLUSTER\_API\_KEY” password =“ CLUSTER\_API\_SECRET”; |
| security.protocol                     | SASL\_SSL                                                                                                                  |

* **CLUSTER\_API\_KEY-**&#x7FA4;集设置中的访问密钥。
* **CLUSTER\_API\_SECRET-**&#x60A8;在“群集”设置中的访问密码。

### MQTT Node

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPcj-FYemX0x9c2E1Eh%2Fimage.png?alt=media\&token=15bc3562-09ac-4cc2-baa4-c10a14bc23d0)

使用QoS **AT\_LEAST\_ONCE**将传入消息有效负载发布到已配置的MQTT代理的主题

配置:

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPciz33P3RNGmWCfNcv%2Fimage.png?alt=media\&token=ba96e4f8-4f81-4e12-acad-0bf8b5f2f62f)

* **Topic pattern** - 可以是静态字符串，也可以是使用消息元数据属性解析的模式。例如`${deviceType}`.
* **Host** - MQTT代理主机.
* **Port** - MQTT代理端口.
* **Connection timeout** - 连接到MQTT代理的超时(秒).
* **Client ID** - 可选的客户端标识符，用于连接到MQTT代理。如果没有指定，将使用默认生成的clientId.
* **SSL Enable/Disable** - 启用/禁用安全通信.
* **Credentials** - MQTT连接凭据。可以是匿名的，基本的或者PEM。

外部MQTT代理支持不同的身份验证凭证:

* Anonymous - 没有身份验证
* Basic - 用户名\密码对用于认证
* PEM - PEM证书用于身份验证

**PEM** PEM证书用于身份验证 如果选择PEM凭证类型:

* CA证书文件
* 证书文件
* 私钥文件
* 私钥密码

**Published body** - 节点将向MQTT主题发送完整的消息有效负载。如果需要，可以将规则链配置为使用转换节点链，以将正确的有效负载发送到MQTT代理.

在成功发布消息的情况下，原始消息将通过**Success**链传递到下一个节点，否则将使用**Failure**链。

### Azure IoT Hub Node

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPciwMXexZxeWiRJm8X%2Fimage.png?alt=media\&token=73e20679-7f74-40de-8ae5-8f786eeef49e)

配置:

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPcitJT21QBQ0PKSj2s%2Fimage.png?alt=media\&token=2ad8a841-6d2d-4a38-a420-d83977daf971)

* **主题**-有关IoT中心主题使用[链接的](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support#sending-device-to-cloud-messages)更多信息。
* **主机名**-Azure IoT中心主机名。
* **设备ID-**&#x60A8;来自Azure IoT中心的设备ID。
* **凭据**-Azure IoT中心连接凭据。可以是*共享访问签名*或*PEM*。

Azure IoT中心支持不同的身份验证凭据：

* 共享访问签名-SAS密钥用于身份验证
* PEM-PEM证书用于身份验证

如果选择了**共享访问签名**凭据类型，则应提供以下配置：

* SAS密钥-它是[Azure IoT中心中](https://docs.microsoft.com/en-us/azure/iot-edge/how-to-authenticate-downstream-device#symmetric-key-authentication)设备的密钥
* CA证书文件，默认情况下使用的是巴尔的摩证书。有关证书的更多信息，请[点击此处](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support#tlsssl-configuration)

如果选择了**PEM**凭证类型，则应提供以下配置：

* CA证书文件，默认情况下使用的是巴尔的摩证书。有关证书的更多信息，请[点击此处](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support#tlsssl-configuration)
* 证书文件
* 私钥文件
* 私钥密码

[X.509 CA签名的身份验证](https://docs.microsoft.com/en-us/azure/iot-edge/how-to-authenticate-downstream-device#x509-ca-signed-authentication)

[CACertificates指令](https://github.com/Azure/azure-iot-sdk-c/tree/master/tools/CACertificates)

**已发布的正文**-节点会将完整的消息有效负载发送到Azure IoT中心设备。如果需要，可以将规则链配置为使用转换节点链，以将正确的有效负载发送到Azure IoT中心。

在成功发布消息的情况下，原始消息将通过**成功**链传递到下一个节点，否则将使用**失败**链。

### RabbitMQ Node

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPcicmc0qH_sTIFhDIp%2Fimage.png?alt=media\&token=8a4c700e-cb69-4391-b4a1-ffafe30a0485)

将传入的消息有效负载发布到RabbitMQ.

配置:

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPcibOGcJ_TSgo-zB3l%2Fimage.png?alt=media\&token=b9df3815-6a5a-4f76-9cb3-5c5a43a18201)

* **Exchange name pattern** - 发布消息时所做的交换。可以是静态字符串，也可以是使用消息元数据属性解析的模式。例如`${deviceType}` .
* **Routing key pattern** - 路由密钥。可以是静态字符串，也可以是使用消息元数据属性解析的模式。例如 `${deviceType}` .
* **Message properties** - 可选的路由headers。支持*TEXT\_PLAIN*, *MINIMAL\_BASIC*, *MINIMAL\_PERSISTENT\_BASIC*, *PERSISTENT\_BASIC*, *PERSISTENT\_TEXT\_PLAIN*
* **Host** - 用于连接的默认主机
* **Port** - 用于连接的默认端口
* **Virtual host** - 连接代理时要使用的虚拟主机
* **Username** - AMQP用户名，在连接代理时使用
* **Password** - AMQP连接代理时使用的密码
* **Automatic recovery** - 启用或禁用自动连接恢复
* **Connection timeout** - 连接建立TCP超时，以毫秒为单位;零表示无限
* **Handshake timeout** - AMQP0-9-1协议握手超时，以毫秒为单位
* **Client properties** - 启动连接时发送到服务器的附加属性

**Published body** - 已发布的主体-节点将向RabbitMQ发送完整的消息有效负载。

如果需要，可以配置规则链，使用转换节点链发送正确的负载。 如果消息发布成功，原始消息将通过**Success**链传递到下一个节点，否则将使用**Failure**链。

### REST API Call Node

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPci_4u1ZTtnPRGehr3%2Fimage.png?alt=media\&token=e3e8e5e7-ad0d-4fdb-a2f7-4d4dff7ae0b0)

REST API调用外部REST服务器。

配置:

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPciYagOTZk0FV19-du%2Fimage.png?alt=media\&token=214a45de-9ff4-47a9-95f5-355c84fc5da7)

* **Endpoint URL pattern** - 可以是静态字符串，也可以是使用消息元数据属性解决的模式。例如 `${deviceType}`
* **Request method** - *GET*, *POST*, *PUT*, *DELETE*
* **Headers** - 请求Headers、Headers或值可以是静态字符串，也可以是使用消息元数据属性解析的模式。

**Endpoint URL**

URL可以是静态字符串或patterns。只使用消息元数据解析模式。因此，模式中使用的属性名必须存在于消息元数据中，否则原始模式将被添加到URL中。

例如，如果消息payload包含带有值**container**的属性**deviceType**，则此模式:

`http://localhost/api/${deviceType}/update`

被解析为

`http://localhost/api/container/update`

**Headers**

可以配置标题名称/值的集合。 这些标题将被添加到Rest请求中。 模式应用于配置标头名称和标头值。 例如 `${deviceType}`. 仅消息元数据用于解决模式。因此，模式中使用的属性名称必须存在于消息元数据中，否则原始模式将添加到标头中。

**Request body** -节点将向配置的REST端点发送完整的消息Payload。如果需要，可以将规则链配置为使用转换节点链来发送正确的Payload。

**Outbound message** 将在消息元数据中包含响应状态，**status**, **statusCode**, **statusReason**和**headers**。 出站消息有效负载将与响应正文相同。原始邮件类型和原始发件人将不会更改。

如果请求成功，则出站消息将通过**Success**链传递到下一个节点，否则将使用**Failure**链

### Send Email Node

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPciQi9Z98dgffvwXzH%2Fimage.png?alt=media\&token=42c96f35-5861-4286-be03-caacb183e7bf)

节点通过已配置的邮件服务器发送传入消息。此节点只适用于在创建时使用**Email**的消息，请使用**Success**链将此节点与**To Email**节点连接。

配置:

![](https://3662671755-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lv8u0uivkRn8UzKBg4R%2F-MPciFqEbCLCPAK-84mB%2F-MPciOFesyWEOPBVznWR%2Fimage.png?alt=media\&token=3f41e8f9-075e-46a9-96cc-b0218c3f5cba)

* **Use system SMTP settings** - 如果启用，将使用在系统级别配置的默认邮件服务器
* **Protocol** - 邮件服务器传输协议：*SMTP* 或 *SMTPS*
* **SMTP host** - 邮件服务器主机
* **SMTP port** - 邮件服务器端口
* **Timeout ms** - 读取超时，以毫秒为单位
* **Enable TLS** - 如果为true，则启用STARTTLS命令的使用（如果服务器支持）
* **Username** - 邮件主机上帐户的用户名（如果有）
* **Password** - 邮件主机上帐户的密码（如果有）

该节点可以与在系统级别配置的默认邮件服务器一起使用。 请找到有关 如何配置默认系统SMTP设置的详细信息

如果此节点需要特定的邮件服务器，请禁用**Use system SMTP settings**复选框，并手动配置邮件服务器。 该节点可以与在系统级别配置的默认邮件服务器一起使用。有关如何配置默认系统SMTP设置请找到的更多详细信息。 如果此节点需要特定的邮件服务器，请禁用使用系统SMTP设置复选框并手动配置邮件服务器

另外，如果传入消息已参考数据库中存储的文件准备了**附件**字段，则此节点可以创建电子邮件附件。

如果成功发送邮件，原始消息将通过**Success**链传递到下一个节点，否则将使用**Failure**链。
