Как запустить несколько функций Firestore последовательно? - PullRequest
1 голос
/ 17 марта 2020

У нас есть 20 функций, которые должны запускаться каждый день. Каждая из этих функций делает что-то свое, основываясь на входах предыдущей функции.

Мы пытались вызвать все функции в одной функции, но это приводит к ошибке тайм-аута, поскольку эти 20 функций занимают более 9 минут. execute .

Как мы можем запустить эти несколько функций последовательно или избежать ошибки тайм-аута для одной функции, которая выполняет каждую из этих функций?

Ответы [ 3 ]

0 голосов
/ 17 марта 2020

Существует вариант решения Дуга. В конце функции вместо публикации сообщения в pubsub просто напишите спецификацию c log (например, «end»).

Затем go для регистрации в стеке драйвера, найдите эту спецификацию c журнал трассировки (включите расширенные фильтры) и настройте приемник в PubSub topi c этой записи журнала. Таким образом, каждый раз, когда обнаруживается журнал, публикуется сообщение PubSub с содержимым журнала.

Наконец, подключите следующую функцию к этому PubSub topi c.

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

Цепные функции - непростая задача. Скоро, возможно, Google Cloud Next объявит о новых продуктах, которые помогут вам в этой задаче.

0 голосов
/ 17 марта 2020

Если вы просто хотите, чтобы функции выполнялись по порядку , и вам не нужно передавать результат одного непосредственно следующему, , вы можете заключить их в запланированную функцию ( документы ), который распределяет их с достаточным количеством времени для каждого запуска.

Набросок ниже с интервалом в 3 минуты:

exports.myScheduler = functions.pubsub
.schedule('every 3 minutes from 22:00 to 23:00') 
.onRun(context => {
  let time = // check the time
  if (time === '22:00') func1of20();
  else if (time === '22:03') func2of20();
  // etc. through func20of20()
}

Если вам нужно нужно передать результаты каждой функции в следующую, func1 может сохранить ее результат в записи БД func2 начинается с чтения этого результата и заканчивается перезаписью своего собственного, поэтому func3 может читать при запуске через 3 минуты и т. д. c. - хотя, возможно, в этом случае другие решения более приспособлены к вашим потребностям.

0 голосов
/ 17 марта 2020

Нет конфигурации или простой способ сделать это. Для этого вам потребуется настроить достаточное количество кода и инфраструктуры.

Самое простое решение состоит в объединении вызовов вместе с использованием функций типа pubsub . Вы можете отправить сообщение в pubsub topi c, которое вызовет запуск следующей функции. Полезная нагрузка отправляемого сообщения может быть параметрами, которые должна использовать функция, чтобы определить, как она должна работать. Если полезная нагрузка слишком велика или для принятия этого решения требуются более сложные источники данных, вы можете использовать базу данных для хранения промежуточных данных, которые может запрашивать и использовать следующая функция.

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

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