本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
HTTP
HTTPS (http) 操作将数据从 MQTT 消息发送到 HTTPS 终端节点,该终端节点可以指向 Web 应用程序或服务。
要求
此规则操作具有以下要求:
-
您必须先确认并启用 HTTPS 端点,然后规则引擎才能使用它们。有关更多信息,请参阅 HTTP 操作目标。
参数
使用此操作创建 AWS IoT 规则时,必须指定以下信息:
url-
使用 HTTP POST 方法发送消息的 HTTPS 端点。如果使用 IP 地址代替主机名,则该地址必须是 IPv4 地址。不支持 IPv6 地址。
支持替换模板:是
confirmationUrl-
(可选)如果指定,则 AWS IoT 使用确认 URL 创建匹配的主题规则目标。在 HTTP 操作中使用 HTTP 操作目标之前,必须将其启用。有关更多信息,请参阅 HTTP 操作目标。如果您使用替换模板,则必须先手动创建 HTTP 操作目标,然后才能使用该
http操作。confirmationUrl前缀必须为url。url和confirmationUrl之间的关系由以下内容描述:-
如果
url是硬编码且confirmationUrl未提供,则我们会隐式地将该url字段视为.confirmationUrlAWS IoT 为创建主题规则目标url。 -
如果
url和confirmationUrl是硬编码,则url必须以开头。confirmationUrlAWS IoT 为创建主题规则目标confirmationUrl。 -
如果
url包含替换模板,则必须指定confirmationUrl并且url必须以confirmationUrl开头。如果confirmationUrl包含替换模板,则必须先手动创建 HTTP 操作目标,然后才能使用该http操作。如果confirmationUrl不包含替换模板,则为 AWS IoT 创建主题规则目标confirmationUrl。
支持替换模板:是
-
headers-
(可选)要包含在对端点的 HTTP 请求中的标头列表。每个标头都必须包含以下信息:
注意
默认内容类型是 application/json 当有效负载为 JSON 格式时。否则,它是 application/octet-stream。您可以在标头中,使用键内容类型(不区分大小写)指定确切的内容类型来覆盖它。
auth-
(可选)规则引擎在连接到
url参数中指定的端点 URL 时使用的身份验证。目前,Signature Version 4 是唯一支持的身份验证类型。有关更多信息,请参阅 HTTP 授权。支持替换模板:否
enableBatching-
(可选)是否将 HTTP 操作消息处理成对给定网址的单个请求。值可以是真或假。有关批处理的更多信息,请参阅批处理 HTTP 操作消息。
布尔值
支持替换模板:否
batchConfig-
(可选)批处理的配置设置。启用后,必须指定
batchConfig参数。如果未指定batchConfig参数,则将使用默认值。maxBatchOpenMs-
传出消息等待其他消息创建批次的最长时间(以毫秒为单位)。设置越高,批处理 HTTP 操作的延迟时间就越长。
最小值:5 毫秒。最大值:200 毫秒。
默认值:20 毫秒
支持替换模板:否
maxBatchSize-
在单个操作执行中批处理的最大消息数。
支持替换模板:否
最小值:2 条消息。最大值:10 条消息
默认值:10 条消息
maxBatchSizeBytes-
消息批处理的最大大小,以字节为单位。
最小值:100 字节。最大值:131,072 字节
默认值:5,120 字节
支持替换模板:否
batchAcrossTopics-
是否允许将来自不同 MQTT 主题的消息批处理到单个 HTTP 请求中。默认情况下,只有来自同一主题的消息才会批量处理。对于来自多个设备主题的消息发往同一 HTTP 端点的路由用例,启用此参数。
默认值:假
支持替换模板:否
注意
消息始终在相同的账户、规则名称、目标 HTTP 终端节点 URL 和账单组的范围内进行批处理。无论
batchAcrossTopics设置如何,在这些属性中存在差异的消息都不会合并到同一个批次中。注意
默认内容类型是 application/json 当有效负载为 JSON 格式时。否则,它是 application/octet-stream。您可以在标头中,使用键内容类型(不区分大小写)指定确切的内容类型来覆盖它。
示例
以下 JSON 示例定义了一 AWS IoT 条带有 HTTP 操作的规则。
{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "http": { "url": "https://www.example.com/subpath", "confirmationUrl": "https://www.example.com", "headers": [ { "key": "static_header_key", "value": "static_header_value" }, { "key": "substitutable_header_key", "value": "${value_from_payload}" } ] } } ] } }
"http": { "url": "https://www.example.com/subpath", "confirmationUrl": "https://www.example.com", "headers": [ { "key": "Content-Type", "value": "application/json" } ], "enableBatching": true, "batchConfig": { "maxBatchOpenMs": 123, "maxBatchSize": 5, "maxBatchSizeBytes": 131072, } }, "errorAction": { "http": { "url": "https://www.example.com/subpath", "confirmationUrl": "https://www.example.com" // batchConfig is not allowed here } }
HTTP 操作重试逻辑
AWS IoT 规则引擎将根据以下规则重试 HTTP 操作:
-
规则引擎尝试至少发送一次消息。
-
规则引擎最多重试两次。最大尝试次数为三次。
-
在下列情况中,规则引擎不会尝试重试:
-
之前的尝试提供了大于 16384 字节的响应。
-
下游 Web 服务或应用程序在尝试之后关闭了 TCP 连接。
-
完成包括重试在内的请求总用时超过了请求超时限制。
-
该请求返回除 429、500-599 之外的 HTTP 状态代码。
-
注意
标准数据传输费用
另请参阅
-
通过 AWS博客上的物联网将数据直接路由 AWS IoT Core 到您的 Web 服务