Как получить доступ к атрибутам сообщения в конечной точке подписки SNS HTTPS - PullRequest
1 голос
/ 01 мая 2019

Я настраиваю интеграционный тест, чтобы определить, работает ли программа, которая публикует сообщение для SNS, правильно. Опубликованное сообщение содержит несколько критических атрибутов сообщения, которые мне нужно проверить, чтобы определить правильность.

Пока что я настроил простой HTTP-сервер, который действует как подписчик SNS. Сервер правильно подтверждает свою подписку и даже получает сообщения из темы, однако я не знаю, как получить доступ к атрибутам этих сообщений.

Следует отметить, что я использую ngrok, чтобы выставить свой хост SNS. Для этого я использую команду:

ngrok http 8080

Когда я создавал подписку, я обязательно включил сырую доставку сообщений:

subOut, err := snsCli.Subscribe(&sns.SubscribeInput{
    Endpoint: &ngrokURL,
    Attributes: map[string]*string{
        "RawMessageDelivery": aws.String("True"),
    },
    Protocol: aws.String("https"),
    TopicArn: aws.String(topicArn),
})

Примечание. Я также попытался установить для параметра "RawMessageDelivery" значение "true" вместо "True". Это, похоже, не вызывает каких-либо изменений.

Я также пытался использовать протокол http вместо https, но добился тех же результатов.

Ниже приведен запрос отправления уведомления, полученный конечной точкой (я заменил ARN звездочками):

POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: c8bce1ed-3766-5a04-a9ad-b4afc662cc31
x-amz-sns-topic-arn: ****
x-amz-sns-subscription-arn: ****
x-amz-sns-rawdelivery: true
Content-Length: 1
Content-Type: text/plain; charset=UTF-8
Host: ****.ngrok.io
User-Agent: Amazon Simple Notification Service Agent
Accept-Encoding: gzip,deflate
X-Forwarded-Proto: https
X-Forwarded-For: 54.240.230.176

Сообщения, публикуемые в SNS, имеют в своем теле только один байт (один пробел) - поэтому я предполагаю, что длина содержимого равна 1.

Один из атрибутов сообщения имеет двоичный формат и содержит символы, которые не допускаются в теле сообщения SNS, в противном случае я просто поместил бы закодированные атрибуты в тело сообщения.

Кажется, что в запросе отсутствуют какие-либо атрибуты, и я полностью озадачен, почему. Я ожидаю, что они будут частью тела необработанного запроса, но, похоже, это не так. Есть идеи?

РЕДАКТИРОВАТЬ: Я, вероятно, должен добавить, что я добавил подписчика SQS в эту же тему и что подписчик SQS получает атрибуты сообщения, как и следовало ожидать.

1 Ответ

0 голосов
/ 02 мая 2019

Решение так же просто, как отключить RawMessageDelivery.Казалось бы, этот параметр необходим для доставки атрибутов сообщения в конечную точку SQS, но не должен использоваться при доставке в конечную точку HTTP / S.

...