

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

# 重新发布
<a name="republish-rule-action"></a>

重新发布 (`republish`) 操作可将 MQTT 消息重新发布到其它 MQTT 主题。

## 要求
<a name="republish-rule-action-requirements"></a>

此规则操作具有以下要求：
+  Amazon IoT 可以代入执行`iot:Publish`操作的 IAM 角色。有关更多信息，请参阅 [授予 Amazon IoT 规则所需的访问权限](iot-create-role.md)。

  在 Amazon IoT 控制台中，您可以选择或创建 Amazon IoT 允许执行此规则操作的角色。

## 参数
<a name="republish-rule-action-parameters"></a>

使用此操作创建 Amazon IoT 规则时，必须指定以下信息：

`headers`  
MQTT 版本 5.0 标头信息。  
有关更多信息，请参阅《*Amazon API 参考*》中的[RepublishAction](https://docs.amazonaws.cn//iot/latest/apireference/API_RepublishAction.html)和[MqttHeaders](https://docs.amazonaws.cn//iot/latest/apireference/API_MqttHeaders.html)。

`topic`  
消息重新发布到的 MQTT 主题。  
若要重新发布到以 `$` 开头的预留主题，请使用 `$$` 代替。例如，如果要重新发布到设备影子主题 `$aws/things/MyThing/shadow/update`，请将主题指定为 `$$aws/things/MyThing/shadow/update`。  
不支持重新发布到[保留的任务主题](reserved-topics.md#reserved-topics-job)。  
Amazon IoT Device Defender 保留主题不支持 HTTP 发布。
支持[替换模板](iot-substitution-templates.md)：是

`qos`  
（可选）重新发布消息时要使用的服务质量（QoS）级别。有效值：`0`、`1`。默认值为 `0`。有关 MQTT QoS 的更多信息，请参阅 [MQTT](mqtt.md)。  
支持[替换模板](iot-substitution-templates.md)：否

`roleArn`  
允许发布 Amazon IoT 到 MQTT 主题的 IAM 角色。有关更多信息，请参阅 [要求](#republish-rule-action-requirements)。  
支持[替换模板](iot-substitution-templates.md)：否

## 示例
<a name="republish-rule-action-examples"></a>

以下 JSON 示例在 Amazon IoT 规则中定义了重新发布操作。

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'", 
        "ruleDisabled": false, 
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "republish": {
                    "topic": "another/topic",
                    "qos": 1,
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish"
                }
            }
        ]
    }
}
```

以下 JSON 示例定义了在 Amazon IoT 规则中使用替换模板的重新发布操作。

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "republish": {
                    "topic": "${topic()}/republish",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish"
                }
            }
        ]
    }
}
```

以下 JSON 示例在 Amazon IoT 规则`headers`中定义了重新发布操作。

```
{
    "topicRulePayload": {
        "sql": "SELECT * FROM 'some/topic'",
        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "republish": {
                    "topic": "${topic()}/republish",
                    "roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish",
                    "headers": {
                        "payloadFormatIndicator": "UTF8_DATA",
                        "contentType": "rule/contentType",
                        "correlationData": "cnVsZSBjb3JyZWxhdGlvbiBkYXRh",
                        "userProperties": [
                            {
                                "key": "ruleKey1",
                                "value": "ruleValue1"
                            },
                            {
                                "key": "ruleKey2",
                                "value": "ruleValue2"
                            }
                        ]
                    }
                }
            }
        ]
    }
}
```

**注意**  
不会通过[重新发布操作](#republish-rule-action)传递原始源 IP。