首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在HTTP端点确认订阅和获取SNS通知?

如何在HTTP端点确认订阅和获取SNS通知?
EN

Stack Overflow用户
提问于 2016-05-01 01:45:00
回答 4查看 6.4K关注 0票数 1

我正在使用Amazon Elastic Beanstalk运行nodejs网页。我只想从AWS SNS向此网页发送通知,并实时捕获它们。因此,当我发布到HTTP端点时,什么也没有发生,并且我不知道如何获得通知。

作为Http端点,我设置了我的AWS Elastic-Beanstalk http地址。

我正在阅读亚马逊的文档,但我找不到如何在http端点捕获sns消息。

请,任何帮助都将非常感谢。谢谢。

EN

回答 4

Stack Overflow用户

发布于 2019-08-23 16:46:55

试试这个:

代码语言:javascript
复制
    const express = require('express');
    const router = express.Router();
    const request = require('request');
    var bodyParser = require('body-parser')


    router.post('/',bodyParser.text(),handleSNSMessage);
    module.exports = router;


    var handleSubscriptionResponse = function (error, response) {
        if (!error && response.statusCode == 200) {
            console.log('Yess! We have accepted the confirmation from AWS');
        }
        else {
            throw new Error(`Unable to subscribe to given URL`);
            //console.error(error)
        }
    }
    async function handleSNSMessage(req, resp, next) {

        try {
            let payloadStr = req.body
            payload = JSON.parse(payloadStr)
            console.log(JSON.stringify(payload))
            if (req.header('x-amz-sns-message-type') === 'SubscriptionConfirmation') {
                const url = payload.SubscribeURL;
                await request(url, handleSubscriptionResponse)
            } else if (req.header('x-amz-sns-message-type') === 'Notification') {
                console.log(payload)
                //process data here
            } else {
                throw new Error(`Invalid message type ${payload.Type}`);
            }
        } catch (err) {
            console.error(err)
            resp.status(500).send('Oops')
        }
        resp.send('Ok')
    }

注意:我没有使用app.use,因为它会影响我所有的其他端点。

票数 3
EN

Stack Overflow用户

发布于 2017-09-22 16:18:10

当您提供HTTP/HTTPS端点并从aws控制台创建订阅时,Amazon会向该端点发送订阅消息。现在这是一个rest调用,并且您的应用程序必须具有此端点的处理程序,否则您将错过捕获此订阅消息的机会。传递给处理程序的httpRequest对象需要访问它的SNSMsgTypeHdr标头字段。该值将为"SubscriptionConfirmation“。您需要首先捕获此特定消息,然后获取订阅url。您可以在自己的应用程序中处理它,也可以将其打印出来,然后手动访问该url进行订阅。理想情况下,我建议与你的邮件id订阅相同的主题,这样每次你的应用程序收到推送的消息时,你的邮件id也会收到消息(尽管令牌不同),但至少你会确保消息被推送到你的端点。您所需要做的就是继续使用您的应用程序来根据您的需求处理该端点上的消息。

票数 1
EN

Stack Overflow用户

发布于 2016-05-01 02:27:58

SNS有三种类型的消息。订阅、取消订阅和通知。在正确处理subscribe消息之前,您不会收到任何通知消息。这包括在您收到Subscribe请求时向AWS发出API请求。

本例中的调用是ConfirmSubscription:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#confirmSubscription-property

一旦这样做了,您将开始接收通知消息,并且您可以在代码允许的情况下处理这些消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36958160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档