Google Cloud Async Processing возвращает 200 - PullRequest
0 голосов
/ 15 ноября 2018

Я использую облачную функцию Google в качестве веб-крючка для получения полезной нагрузки от стороннего сервиса.Как правило, когда такие сервисы отправляют запросы веб-пользователям, они ожидают HTTP 200 в качестве подтверждения.Однако с настройкой облачной функции, как показано ниже (и в соответствии с рекомендациями Google), запрашивающая служба возвращается 408, когда происходит текущая обработка.

В этой ситуации сторонний сервис (в данном случае это облачная почта, но то же самое относится и к любому веб-крюку, с которым я пытался интегрироваться) будет повторять запрос, даже если он был успешно обработан.

Мой вопрос: как я могу заставить облачную функцию возвращать 200 и продолжать асинхронную обработку?

//This will return a 408 even though the request is processed successfully
exports.emailIngest = functions.https.onRequest((request, response) => 
{
    //return the promise from the firestore admin SDK as per google docs
    return admin.auth().getUserByEmail(request.body.envelope.from).then((user) => {
      console.log('Successfully fetched user data:', user.toJSON());
    }).catch(function (error) {
      console.log('Error fetching user data:', error);
    });
});

1 Ответ

0 голосов
/ 15 ноября 2018

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

Один из способов сделать это - использовать триггер pubsub..Триггер HTTP может транслировать сообщение pubsub, которое затем вызывает выполнение триггера pubsub.Pubsub требует, чтобы биллинг был включен для проекта.

Другим способом является запись в какое-либо место в базе данных реального времени или в Firestore и наличие другого триггера функции в ответ на эту запись.Другая функция, вероятно, захочет удалить записанные данные до того, как они завершатся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...