解析消息格式 - Amazon Simple Notification Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

解析消息格式

Amazon SNS 使用下列格式。

HTTP/HTTPS 标题

当 Amazon SNS 向 HTTP/HTTPS 终端节点发送订阅确认消息、通知、或者取消订阅确认消息时,它将发出一个带有多个 Amazon SNS 特定标头值的 POST 消息。您可使用这些标头值处理以下事情,例如识别消息的类型而无需解析 JSON 消息主题来读取 Type 值。

x-amz-sns-message-type

消息类型。可能的值为SubscriptionConfirmationNotificationUnsubscribeConfirmation

x-amz-sns-message-id

通用唯一标识符,它对于每个发布的通知是唯一的。对于 Amazon SNS 在重试期间重新发送的通知,使用原始消息的消息 ID。

x-amz-sns-topic-arn

表示已经向主题发表消息的 Amazon Resource Name (ARN)。

x-amz-sns-subscription-arn

用于订阅终端节点的 ARN。

下列 HTTP POST 标题是一条发送至 HTTP 终端节点的通知消息的标题示例。

POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55 Content-Length: 1336 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent

HTTP/HTTPS 订阅确认 JSON 格式

订阅一个 HTTP/HTTPS 终端节点后,Amazon SNS 将发送一条订阅确认消息至HTTP/HTTPS 终端节点。此消息包含 SubscribeURL 必须访问以确认订阅的值(或者,您可以使用 TokenConfirmSubscription)。

注意

直到订阅被确认后,Amazon SNS 才会向终端节点发送通知

订阅确认消息是一条 POST 消息,消息正文包含一个带以下名称/值对的 JSON 格式文档。

Message

一个描述消息的字符串。为订阅确认,字符串看上去像这样:

You have chosen to subscribe to the topic arn:aws:sns:us-east-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.
MessageId

通用唯一标识符,它对于每个发布的通知是唯一的。对于 Amazon SNS 在重试期间重新发送的消息,原始消息的消息 ID 被使用。

Signature

消息的Base64编码“SHA1withRSA”签名, MessageId、类型、时间戳和 TopicArn 值。

SignatureVersion

所用 Amazon SNS 签名的版本。

SigningCertURL

用于签署消息的证书的 URL。

SubscribeURL

为了确认订阅而必须访问的 URL。或者,您也可以使用 TokenConfirmSubscription 操作以确认订阅。

Timestamp

订阅确认发出的时间 (GMT)。

Token

可用于 ConfirmSubscription 操作以确认订阅。或者,您只需访问SubscribeURL

TopicArn

终端节点已经订阅该主题的 Amazon Resource Name。

Type

消息类型。为订阅确认,消息类型为:SubscriptionConfirmation

以下HTTPPOST消息是 SubscriptionConfirmation 消息到HTTP端点。

POST / HTTP/1.1 x-amz-sns-message-type: SubscriptionConfirmation x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic Content-Length: 1336 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "SubscriptionConfirmation", "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b", "Token" : "2336412f37...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...", "Timestamp" : "2012-04-26T20:45:04.751Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }

HTTP/HTTPS 通知 JSON 格式

当 Amazon SNS 向已订阅的 HTTP 或 HTTPS 终端节点发送一条通知时,发送到终端节点的 POST 消息具有包含一个带下列名称/值对的 JSON 格式文档的消息正文。

Message

当通知已经发布至主题,消息值已经指定。

MessageId

通用唯一标识符,它对于每个发布的通知是唯一的。对于 Amazon SNS 在重试期间重新发送的通知,使用原始消息的消息 ID。

Signature

Base64编码 SHA1withRSA 消息签名, MessageId、受试者(如果存在)、类型、时间戳和 TopicArn 值。

SignatureVersion

所用 Amazon SNS 签名的版本。

SigningCertURL

用于签署消息的证书的 URL。

Subject

当发布通知至主题时指定的 Subject 参数。

注意

此参数为可选参数。如果未指定 Subject,则此 JSON 格式文档中不会显示该名称/值对。

Timestamp

通知发布的时间 (GMT)。

TopicArn

表示已经向主题发表消息的 Amazon Resource Name (ARN)。

Type

消息类型。用于通知,这种类型属于Notification

UnsubscribeURL

可以用作从主题取消订阅终端节点的 URL。如果您访问此 URL,那么 Amazon SNS 将取消订阅终端节点并不发送通知至此终端节点。

下列 HTTP POST 消息是发送至 HTTP 终端节点的一条通知消息的样例。

POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324 x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96 Content-Length: 773 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "Notification", "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "My First Message", "Message" : "Hello world!", "Timestamp" : "2012-05-02T00:54:06.655Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEw6JRN...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96" }

HTTP/HTTPS 取消订阅确认 JSON 格式

HTTP/HTTPS 终端节点从一个主题取消订阅之后,Amazon SNS将向终端节点发送一条取消订阅的消息。

取消订阅确认消息是一条 POST 消息,消息正文包含一个带以下名称/值对的 JSON 格式文档。

Message

一个描述消息的字符串。为了取消订阅确认,字符串应看起来像这样:

You have chosen to deactivate subscription arn:aws:sns:us-east-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.
MessageId

通用唯一标识符,它对于每个发布的通知是唯一的。对于 Amazon SNS 在重试期间重新发送的消息,原始消息的消息 ID 被使用。

Signature

消息的Base64编码“SHA1withRSA”签名, MessageId,Type,Timestamp,and TopicArn 值。

SignatureVersion

所用 Amazon SNS 签名的版本。

SigningCertURL

用于签署消息的证书的 URL。

SubscribeURL

为了重新确认订阅,您必须访问的 URL。或者,您也可以使用 TokenConfirmSubscription 操作,重新确认订阅。

Timestamp

取消订阅确认发送的时间(GMT)。

Token

可用于 ConfirmSubscription 操作,重新确认订阅。或者,您只需访问SubscribeURL

TopicArn

此终端节点已经从主题取消订阅的 Amazon Resource Name (ARN)。

Type

消息类型。为取消订阅确认,消息类型为UnsubscribeConfirmation

以下HTTPPOST消息是 UnsubscribeConfirmation 消息到HTTP端点。

POST / HTTP/1.1 x-amz-sns-message-type: UnsubscribeConfirmation x-amz-sns-message-id: 47138184-6831-46b8-8f7c-afc488602d7d x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55 Content-Length: 1399 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "UnsubscribeConfirmation", "MessageId" : "47138184-6831-46b8-8f7c-afc488602d7d", "Token" : "2336412f37...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to deactivate subscription arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37fb6...", "Timestamp" : "2012-04-26T20:06:41.581Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEHXgJm...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }

SetSubscriptionAttributes 传递策略JSON格式

如果您向 SetSubscriptionAttributes 并设置 AttributeName 参数的值 DeliveryPolicy, AttributeValue 参数必须是有效的JSON对象。例如,以下例子将传输策略设置为 5 次重试。

http://sns.us-east-2.amazonaws.com/ ?Action=SetSubscriptionAttributes &SubscriptionArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic%3A80289ba6-0fd4-4079-afb4-ce8c8260f0ca &AttributeName=DeliveryPolicy &AttributeValue={"healthyRetryPolicy":{"numRetries":5}} ...

对的值使用以下JSON格式 AttributeValue 参数。

{ "healthyRetryPolicy" : { "minDelayTarget" : int, "maxDelayTarget" : int, "numRetries" : int, "numMaxDelayRetries" : int, "backoffFunction" : "linear|arithmetic|geometric|exponential" }, "throttlePolicy" : { "maxReceivesPerSecond" : int } }

有关 SetSubscriptionAttribute 操作,转到 SetSubscriptionAttributesAmazon Simple Notification Service API Reference.

SetTopicAttributes 传递策略JSON格式

如果您向 SetTopicAttributes 并设置 AttributeName 参数的值 DeliveryPolicy, AttributeValue 参数必须是有效的JSON对象。例如,以下例子将传输策略设置为 5 次重试。

http://sns.us-east-2.amazonaws.com/ ?Action=SetTopicAttributes &TopicArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic &AttributeName=DeliveryPolicy &AttributeValue={"http":{"defaultHealthyRetryPolicy":{"numRetries":5}}} ...

对的值使用以下JSON格式 AttributeValue 参数。

{ "http" : { "defaultHealthyRetryPolicy" : { "minDelayTarget": int, "maxDelayTarget": int, "numRetries": int, "numMaxDelayRetries": int, "backoffFunction": "linear|arithmetic|geometric|exponential" }, "disableSubscriptionOverrides" : Boolean, "defaultThrottlePolicy" : { "maxReceivesPerSecond" : int } } }

有关 SetTopicAttribute 操作,转到 SetTopicAttributesAmazon Simple Notification Service API Reference.