Мы используем Firebase для нашего приложения, которое должно обработать некоторые данные и затем отправить серию электронных писем после того, как их данные будут определены.
Прямо сейчас я запускаю один обработчик через CRON (который использует pub / sub), который обрабатывает данные и затем публикует серию сообщений в другой pub / sub теме. Эта тема, в свою очередь, имеет аналогичную триггерную функцию, которая проходит через несколько процессов, а затем отправляет одно электронное письмо за выполнение.
// Triggered by CRON task
const cronPublisher = functions.pubsub.topic('queue-emails').onPublish(async () => {
//processing
...
// Publish to other topic
await Promise.all(
emails.map((email) =>
publisher.queueSendOffer(email)
)
);
});
// Triggered by above, at times twice
const sendEmail = functions.pubsub.topic('send-email').onPublish(async () => {
//processing and send email
});
Проблема, с которой я сталкиваюсь, заключается в том, что 2-й триггер темы время от времени выполняется более одного раза, отправляя два идентичных электронных письма. Основная потенциальная причина, с которой я столкнулся через Google, заключается в длительном времени выполнения, что приводит к тайм-аутам и повторным попыткам. Это не должно иметь место , поскольку наш тайм-аут подтверждения настроен на 300 секунд, а время выполнения никогда не превышает ~ 12 секунд.
Кроме того, интерфейс Firebase, похоже, не дает вам никакого контроля над тем, как отправляется это подтверждение.
Эта функция CRON запускается каждый день, и проблема возникает только каждые 4-5 дней, но затем дублирует каждое электронное письмо.
Есть мысли?
Оценил.