我正在使用Amazon Elastic Beanstalk运行nodejs网页。我只想从AWS SNS向此网页发送通知,并实时捕获它们。因此,当我发布到HTTP端点时,什么也没有发生,并且我不知道如何获得通知。
作为Http端点,我设置了我的AWS Elastic-Beanstalk http地址。
我正在阅读亚马逊的文档,但我找不到如何在http端点捕获sns消息。
请,任何帮助都将非常感谢。谢谢。
发布于 2019-08-23 16:46:55
试试这个:
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,因为它会影响我所有的其他端点。
发布于 2017-09-22 16:18:10
当您提供HTTP/HTTPS端点并从aws控制台创建订阅时,Amazon会向该端点发送订阅消息。现在这是一个rest调用,并且您的应用程序必须具有此端点的处理程序,否则您将错过捕获此订阅消息的机会。传递给处理程序的httpRequest对象需要访问它的SNSMsgTypeHdr标头字段。该值将为"SubscriptionConfirmation“。您需要首先捕获此特定消息,然后获取订阅url。您可以在自己的应用程序中处理它,也可以将其打印出来,然后手动访问该url进行订阅。理想情况下,我建议与你的邮件id订阅相同的主题,这样每次你的应用程序收到推送的消息时,你的邮件id也会收到消息(尽管令牌不同),但至少你会确保消息被推送到你的端点。您所需要做的就是继续使用您的应用程序来根据您的需求处理该端点上的消息。
发布于 2016-05-01 02:27:58
SNS有三种类型的消息。订阅、取消订阅和通知。在正确处理subscribe消息之前,您不会收到任何通知消息。这包括在您收到Subscribe请求时向AWS发出API请求。
本例中的调用是ConfirmSubscription:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#confirmSubscription-property
一旦这样做了,您将开始接收通知消息,并且您可以在代码允许的情况下处理这些消息。
https://stackoverflow.com/questions/36958160
复制相似问题