Firebase: могу ли я не подтвердить сообщение PubSub внутри облачной функции Firebase?

У меня есть облачная функция Firebase, которая запускается сообщением PubSub. Функция должна либо принять сообщение, либо подождать, чтобы использовать его позже.

Есть ли способ вернуться из этой функции без подтверждения сообщения, чтобы оно было доставлен повторно позже?

Например, могу ли я вернуть Message из облачной функции ? В документах указано, что это возможно, если Я правильно их читаю:

Возвращает non-null functions.CloudFunction containing non-null functions.pubsub.Message A Cloud Function which you can export.


person bcattle    schedule 03.08.2017    source источник
comment
вернуть успешное обещание   -  person andresmijares    schedule 20.08.2019


Ответы (1)


Когда PubSub запускает функцию (Firebase или Cloud Function), если функция завершается правильно, сообщение подтверждается. Но если функция дает сбой или вызывает исключение (в общем, ненормальное завершение), сообщение не подтверждается и немедленно отправляется повторно.

Этот цикл повторных попыток выполняется до тех пор, пока сообщение не будет подтверждено или срок действия сообщения не истечет (по умолчанию и максимальный TTL составляет 7 дней, минимум — 10 минут. Вы можете настроить messageRetentionDuration в подписке).

person guillaume blaquiere    schedule 20.08.2019
comment
Действительно ли это действительно? Я возвращаю отклоненное обещание, и других вызовов функции firebase с таким же сообщением нет. Должна ли это быть конкретная ошибка для отклонения или какой-либо другой специальной обработки? - person Michael Sotnikov; 16.04.2020
comment
Можете ли вы поделиться своим кодом и показать, как вы возвращаете свои ошибки для noack? - person guillaume blaquiere; 17.04.2020
comment
Схема потока кода: pastebin.com/erme5D6p Итак, я возвращаю отклоненное обещание с ошибкой (name='OtherError', message =`‹HTML-код, полученный от API›') - person Michael Sotnikov; 18.04.2020
comment
хм. Может быть, мне следует повторно выдать ошибку вместо того, чтобы возвращать отклоненное обещание от .catch()? - person Michael Sotnikov; 18.04.2020
comment
есть ли у него какой-либо язык или обоснование firebase, почему это будет иначе? Насколько я понимаю, ts/js - это идентично. - person Michael Sotnikov; 18.04.2020
comment
Согласно этой проблеме: github.com/firebase/firebase-functions/issues/661, этот ответ неверен, и любое выполнение подтвердит сообщение. Обратите внимание, что это firebase-functions. Облачные функции Google с их клиентской библиотекой nodejs должны работать по-другому. - person Michael Sotnikov; 24.04.2020
comment
Можете ли вы поделиться ссылкой на какую-либо документацию или процитировать внешний источник? Потому что это не похоже на правду (для firebase). - person seza443; 14.08.2020