谷歌云存储功能在订阅者连接时发送已发送的消息

Posted

技术标签:

【中文标题】谷歌云存储功能在订阅者连接时发送已发送的消息【英文标题】:Google cloud storage function sending already delivered message when subscriber connects 【发布时间】:2020-08-07 07:31:32 【问题描述】:

我在谷歌存储云中有一个存储桶。此外,我有一个存储功能,每次在此存储桶上创建新文件/文件夹时都会触发该功能。此功能的想法是在 google PubSub 上发布在“monitoring”文件夹下创建的文件。因此,一旦有新文件,它将被触发,但如果文件是在上述文件夹下创建的,则仅将消息发送到 PubSub。此外,我有一个订阅 PubSub 的 Java 应用程序接收此消息。它能够毫无问题地接收消息,但是当我关闭应用程序并再次午餐时,几分钟后,之前传递的消息又来了。我检查了日志,看看是否触发了存储功能,但事实并非如此,似乎没有再次向 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】:

Pubsub 不保证消息只出现一次

Google Cloud Pubsub 具有至少一次交付政策。对于每个订阅,这至少会传递每个已发布的消息一次。但可以多次投递

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

【讨论】:

以上是关于谷歌云存储功能在订阅者连接时发送已发送的消息的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云平台推送订阅发送重复消息 ID 字段

谷歌云消息“未注册”失败并取消订阅最佳做法?

谷歌云功能下载文件并重定向到桶存储

使用云功能在谷歌云发布/订阅上发布需要 3 分钟 - nodejs

谷歌云发布订阅延迟消息

谷歌云任务未将正文发送到 http 云功能