Nano Hash - криптовалюты, майнинг, программирование

Как подтвердить подписку и получать уведомления SNS на конечной точке HTTP?

Я использую Amazon Elastic Beanstalk для запуска веб-страницы nodejs. Я просто хочу отправлять уведомления на эту веб-страницу из AWS SNS и перехватывать их в режиме реального времени. Итак, когда я публикую в конечной точке HTTP, ничего не происходит, и я не знаю, как получить уведомление.

В качестве конечной точки Http я установил свой http-адрес AWS Elastic-Beanstalk.

Я читаю документы Amazon, но нигде не могу найти, как поймать сообщение sns один раз в конечной точке http.

Пожалуйста, любая помощь будет очень признательна. Спасибо.


Ответы:


1

Попробуй это:

    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, так как это повлияет на все мои другие конечные точки.

23.08.2019

2

В тот момент, когда вы указываете свою конечную точку HTTP/HTTPS и создаете подписку из консоли aws, происходит следующее: Amazon отправляет сообщение о подписке на эту конечную точку. Теперь это вызов для отдыха, и ваше приложение должно иметь обработчик для этой конечной точки, иначе вы пропустите это сообщение о подписке. Объект httpRequest, который передается вашему обработчику, должен получить доступ к полю заголовка SNSMsgTypeHdr. Это значение будет "SubscriptionConfirmation". Вам нужно сначала поймать это конкретное сообщение, а затем получить URL-адрес подписки. Вы можете обработать его в самом приложении или, возможно, распечатать его, а затем вручную перейти по этому URL-адресу, чтобы оформить подписку. В идеале я бы предложил сделать подписку на ту же тему одновременно с вашим почтовым идентификатором, чтобы каждый раз, когда ваше приложение получает сообщения, ваш почтовый идентификатор также получал сообщение (хотя токены будут другими), но, по крайней мере, вы будете убедитесь, что сообщение было отправлено на вашу конечную точку. Все, что вам нужно сделать, это продолжать работать над своим приложением, чтобы обрабатывать сообщения в этой конечной точке в соответствии с вашими требованиями.

22.09.2017

3

Есть 3 типа сообщений с SNS. Подписка, отписка и уведомление. Вы не будете получать никаких уведомлений, пока вы правильно не обработаете сообщение о подписке. Это включает в себя отправку запроса API к AWS, когда вы получаете запрос на подписку.

В этом случае вызов ConfirmSubscription: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#confirmSubscription-property

Как только вы это сделаете, вы начнете получать уведомления и сможете обрабатывать их, как позволяет ваш код.

30.04.2016
  • Спасибо за ответ. Проблема в том, что когда я публикую из AWS SNS, я не получаю сообщение scbscribe и, следовательно, токен в мою конечную точку http или какой-либо другой контент POST. Токен требуется для подтверждения подписки, но я не получаю учетные данные POST, необходимые для обработки подтверждения подписки. 30.04.2016
  • Если вы пытаетесь получить доступ к своей конечной точке в браузере, все ли работает нормально? 01.05.2016
  • Действительно, я пытаюсь получить к нему доступ в браузере, я использую nodejs Express, я пытаюсь обработать сообщение о подписке, установив события server.on('request'... в моем файле js, но я все еще могу Не справитесь и подтвердите эту подписку. 01.05.2016

  • 4

    После того как вы подпишетесь на свою конечную точку, Amazon SNS отправит на конечную точку сообщение с подтверждением подписки. У вас должен быть код на конечной точке, который извлекает значение SubscribeURL из сообщения с подтверждением подписки и либо посещает место, указанное самим SubscribeURL, либо делает его доступным для вас, чтобы вы могли вручную посетите SubscribeURL, например, с помощью веб-браузера.

    Amazon SNS не будет отправлять сообщения на конечную точку, пока подписка не будет подтверждена.

    Вы можете использовать консоль Amazon SNS, чтобы убедиться, что подписка подтверждена: идентификатор подписки будет отображать ARN для подписки вместо значения PendingConfirmation, которое вы видели при первом добавлении подписки.

    13.12.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..