Функция облачного хранилища Google отправляет уже доставленное сообщение при подключении абонента - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть корзина в облачном хранилище Google. Кроме того, у меня есть функция хранения, которая срабатывает каждый раз, когда в этом сегменте создается новый файл / папка. Идея этой функции заключается в публикации sh на Google PubSub файлов, которые были созданы в папке «мониторинга». Таким образом, он будет запущен при появлении нового файла, но только при отправке сообщения в PubSub, если файл был создан в указанной папке. Кроме того, у меня есть приложение Java, подписанное на PubSub, получающее эти сообщения. Он может получать сообщения без проблем вообще, но когда я закрываю приложение и снова запускаю его, через несколько минут сообщения, которые были доставлены ранее, снова приходят. Я проверил журналы и проверил, сработала ли функция хранения, но это не так, и похоже, что в PubSub сообщение больше не отправлялось. Все сообщения были подтверждены, а PubSub пуст. Я что-то упускаю из-за функции хранилища или PubSub?

Это мое определение функции хранилища:

const {PubSub} = require('@google-cloud/pubsub');
const topicName = 'test-topic-1';
const monitoringFolder = 'monitoring/';

exports.handler = (event, context) => {
    console.log(event);
    if (isMonitoringFolder(event.name)) {
        publishEvent(event);
    }
};

const publishEvent = (event) => {
    const pubSub = new PubSub();
    const payload = {
        bucket: event.bucket,
        filePath: event.name,
        timeCreated: event.timeCreated
    };
    const data = Buffer.from(JSON.stringify(payload));
    pubSub
        .topic(topicName)
        .publish(data)
        .then(id => console.log(`${payload.filePath} was added to pubSub with id: ${id}`))
        .catch(err => console.log(err));
};

const isMonitoringFolder = filePath => filePath.search(monitoringFolder) != -1

Буду очень признателен за любой совет

1 Ответ

1 голос
/ 24 апреля 2020

Pubsub не гарантирует единственное вхождение сообщения

В Google Cloud Pubsub действует политика доставки по крайней мере один раз. При этом каждое опубликованное сообщение доставляется как минимум один раз для каждой подписки. Но он может быть доставлен несколько раз

https://cloud.google.com/pubsub/docs/subscriber

...