谷歌云存储功能在用户连接时发送已发送的信息。

问题描述 投票:0回答:1

我在google存储云中有一个桶。此外,我有一个存储功能,被触发每次有一个新的文件夹创建在这个桶。这个功能的想法是在谷歌PubSub上发布在 "监控 "文件夹下创建的文件。所以,一旦有新的文件,它就会被触发,但只有当文件是在上述文件夹下创建的,才会向PubSub发送消息。此外,我有一个Java应用程序订阅到PubSub接收这个消息。它能够毫无问题地接收消息,但是当我关闭应用程序并再次启动它时,几分钟后,之前发送的消息又出现了。我检查了日志,看看是否有存储功能被触发,但事实并非如此,似乎没有消息再次被发送到PubSub。所有的消息都是Acked,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

我真的很感谢你的建议

google-cloud-platform google-cloud-storage google-cloud-pubsub
1个回答
1
投票

Pubsub不保证消息的单次出现。

Google Cloud Pubsub有一个At-Least-Once的交付政策。这对每一个订阅者来说,每一条发布的信息至少要传递一次。但它可以被多次传送

https:/cloud.google.compubsubdocssubscriber。

© www.soinside.com 2019 - 2024. All rights reserved.