1

我正在使用Amazon Elastic Beanstalk运行nodejs网页。我只想将通知从AWS SNS发送到此网页并实时捕获它们。所以,当我发布到HTTP端点时,没有任何反应,我不知道如何获得通知。如何确认订阅并获取HTTP端点的SNS通知?

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

我正在阅读亚马逊文档,但无处可以找到如何在http端点处捕获一次sns消息。

请任何帮助将非常感激。谢谢。

回答

0

有3种消息与SNS。订阅,取消订阅和通知。在您正确处理订阅消息之前,您将不会收到任何通知消息。这涉及到在收到订阅请求时向AWS提出API请求。

在这种情况下,调用ConfirmSubscription:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#confirmSubscription-property

一旦你这样做,那么你将开始接收通知消息,你可以处理那些为你的代码允许。

+0

感谢您的回复。问题是,当我从AWS SNS发布时,我没有收到scbscribe消息,因此没有收到我的http端点中的令牌,也没有收到任何其他POST内容。这个令牌是需要确认的,但是我没有收到处理订阅确认所需的POST“证书”。 –

+0

如果您尝试在浏览器中访问您的端点,是否一切正常? – datasage

+0

事实上,我试图在浏览器中访问它,我使用nodejs express,我试图通过在我的js中设置一个“server.on('request'...”事件来处理“订阅消息”文件,但我仍然无法处理它并确认此订阅。 –

0

订阅您的终端后,Amazon SNS将向终端发送预订确认消息。 你应该从认购确认信息检索SubscribeURL价值,无论是SubscribeURL本身或将其提供给您访问指定的位置,以便您可以手动访问SubscribeURL,例如端点有码,使用网络浏览器。

直到订阅已确认,亚马逊SNS才会将消息发送到端点。

您可以使用Amazon SNS控制台验证订阅是否已确认:订阅ID将显示订阅的ARN,而不是您在第一次添加订阅时看到的PendingConfirmation值。

1

当您给HTTP/HTTPS端点并从aws控制台创建订阅时,会发生什么情况是,Amazon向该端点发送订阅消息。现在这是一个休息电话,您的应用程序必须为此端点提供一个处理程序,否则您会错过捕获此订阅消息。您的处理程序传递的httpRequest对象需要访问它的SNSMsgTypeHdr头字段。这个值将是“SubscriptionConfirmation”。您需要先捕获此特定消息,然后获取订阅网址。您可以在应用程序本身处理它,也可以将其打印出来,然后手动访问该URL以进行订阅。理想情况下,我会建议订阅相同的主题,与您的邮件ID相同,以便每次您的应用获得推送的消息时,您的邮件ID也会获得该消息(尽管令牌会有所不同),但至少您会确保该消息被推送到您的端点。您需要做的就是继续处理您的应用,然后根据您的需求处理该端点处的消息。