

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

# Amazon SNS 原始消息传输
原始消息传输

为避免使 [扇出到 Firehose 传输流](sns-firehose-as-subscriber.md)、[Amazon SQS](sns-sqs-as-subscriber.md) 和 [HTTP/S](sns-http-https-endpoint-as-subscriber.md) 端点处理 JSON 格式的消息，Amazon SNS 支持原始消息传输：
+ 当您为 Amazon SQS 端点启用原始消息传输时，将从已发布的消息中删除任何 Amazon SNS 元数据，并按原样发送消息。
+ 当您为 HTTP/S 终端节点启用原始消息传送时，其值设置为`true`的 HTTP 标头`x-amz-sns-rawdelivery`将添加到消息中，表示消息已在没有 JSON 格式的情况下发布。
+ 当您为 HTTP/S 端点启用原始消息传输时，将传递消息正文、客户端 IP 和所需的标头。当您指定消息属性时，将不会发送它。
+ 当您为 Firehose 端点启用原始消息传输时，将传输消息正文。当您指定消息属性时，将不会发送它。

要使用 Amazon SDK 启用原始消息传送，必须使用 `SetSubscriptionAttribute` API 操作并将`RawMessageDelivery`属性的值设置为`true`。

## 使用启用原始消息传送 Amazon Web Services 管理控制台


1. 登录 [Amazon SNS 控制台](https://console.amazonaws.cn/sns/home)。

1. 在导航面板上，选择**主题**。

1. 在**主题**页面上，选择订阅了 Firehose、Amazon SQS 或终端节点的主题。 HTTP/S 

1. 在该***MyTopic***页面的**订阅**部分，选择订阅并选择**编辑**。

1. 在**编辑*EXAMPLE1-23bc-4567-d890-ef12g3hij456***页面的**详细信息**部分，选择**启用原始消息传送**。

1. 选择**保存更改**。

## 消息格式示例


在以下示例中，同一消息将发送到同一 Amazon SQS 队列两次。唯一的区别是第一条消息禁用原始消息传输，第二条消息则启用该传输。
+ 原始消息传输**已禁用**

  ```
  {
    "Type": "Notification",
    "MessageId": "dc1e94d9-56c5-5e96-808d-cc7f68faa162",
    "TopicArn": "arn:aws:sns:us-east-2:111122223333:ExampleTopic1",
    "Subject": "TestSubject",
    "Message": "This is a test message.",
    "Timestamp": "2021-02-16T21:41:19.978Z",
    "SignatureVersion": "1",
    "Signature": "FMG5tlZhJNHLHUXvZgtZzlk24FzVa7oX0T4P03neeXw8ZEXZx6z35j2FOTuNYShn2h0bKNC/zLTnMyIxEzmi2X1shOBWsJHkrW2xkR58ABZF+4uWHEE73yDVR4SyYAikP9jstZzDRm+bcVs8+T0yaLiEGLrIIIL4esi1llhIkgErCuy5btPcWXBdio2fpCRD5x9oR6gmE/rd5O7lX1c1uvnv4r1Lkk4pqP2/iUfxFZva1xLSRvgyfm6D9hNklVyPfy+7TalMD0lzmJuOrExtnSIbZew3foxgx8GT+lbZkLd0ZdtdRJlIyPRP44eyq78sU0Eo/LsDr0Iak4ZDpg8dXg==",
    "SigningCertURL": "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-010a507c1833636cd94bdb98bd93083a.pem",
    "UnsubscribeURL": "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:111122223333:ExampleTopic1:e1039402-24e7-40a3-a0d4-797da162b297"
  }
  ```
+ 原始消息传输**已启用**

  ```
  This is a test message.
  ```

## Amazon SQS 订阅的消息属性和原始消息传送


Amazon SNS 支持传输消息属性，从而让您提供与消息相关的结构化元数据项目（如时间戳、地理空间数据、签名和标识符）。对于 Amazon SQS 订阅，在启用**原始消息传输**时，最多可以发送 10 个消息属性。要发送 10 个以上的消息属性，您必须禁用“原始消息传输”。Amazon SNS 会丢弃所具有的消息属性（定向到启用了原始消息传输的 Amazon SQS 订阅）超过 10 个的消息，将其视为客户端错误。