gpt4 book ai didi

google-cloud-storage - Google Cloud Storage 对象完成事件多次触发

转载 作者:行者123 更新时间:2023-12-05 06:30:58 24 4
gpt4 key购买 nike

场景

我有几个由 Google Cloud Storage object.finalize 事件触发的 Google Cloud Functions。为此,我使用两个存储桶并使用“同步选项:覆盖目标位置的对象”传输作业,每天将一个文件从一个源存储桶复制到目标存储桶。两个函数的源存储桶相同,目标存储桶不同。

问题

大部分时间它都按预期工作,但有时我几乎同时看到多个事件。大多数时候,我看到 2 个重复项,但一次是 3 个。我输入了日志事件有效负载,但它始终相同。

更多详情

Here is an example of multiple log entries

问题

这可能是 Google Cloud Storage 的已知问题吗?

如果不是,那么很可能我的代码有问题。

我正在使用以下项目结构:

/functions
|--/foo-code
|--executor.js
|--foo.sql
|--/bar-code
|--executor.js
|--bar.sql
|--/shared-code
|--utils.js
|--index.js
|--package.json

索引.js

let foo;
let bar;

exports.foo = (event, callback) => {
console.log(`event ${JSON.stringify(event)}`);
foo = foo || require(`./foo-code/executor`);
foo.execute(event, callback);
};

exports.bar = (event, callback) => {
console.log(`event ${JSON.stringify(event)}`);
bar = bar || require(`./bar-code/executor`);
bar.execute(event, callback);
};

./foo-code/executor.js

const utils = require('../shared-code/utils.js)

exports.execute = (event, callback) => {
// run Big Query foo.sql statement
};

./bar-code/executor.js

const utils = require('../shared-code/utils.js)

exports.execute = (event, callback) => {
// run Big Query bar.sql statement
};

最后是部署:

foo 具有特定桶触发器的后台函数:

gcloud beta functions deploy foo \
--source=https://<path_to_repo>/functions \
--trigger-bucket=foo-destination-bucket \
--timeout=540 \
--memory=128MB

bar 具有特定桶触发器的后台函数:

gcloud beta functions deploy bar \
--source=https://<path_to_repo>/functions \
--trigger-bucket=bar-destination-bucket \
--timeout=540 \
--memory=128MB

在我看来,最可能的问题是由于多个部署的事实(只有 trigger-bucket 标志不同)。但奇怪的是,上面的设置大部分时间都有效。

最佳答案

Cloud Functions 的正常行为是至少传递一次事件并调用后台函数,这意味着很少会发生虚假重复。

为确保您的函数在重试执行尝试时表现正确,您应该通过实现它来使其幂等,以便即使多次传递事件也会产生所需的结果(和副作用)。

查看一些文档 guidelines for making a background function idempotent .

关于google-cloud-storage - Google Cloud Storage 对象完成事件多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51968071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com