【问题标题】:Google Cloud Storage change notifications with Node.js使用 Node.js 的 Google Cloud Storage 更改通知
【发布时间】:2017-04-13 05:42:38
【问题描述】:

我有 Firebase 存储桶,我想使用 Node.js Google-cloud 通知 API 来监听存储的变化。

到目前为止我所拥有的:

const gcloud = require('google-cloud');

const storage = gcloud.storage({
  projectId: 'projectId',
  credentials: serviceAccount
});  

const storageBucket = storage.bucket('bucketId');

现在据我了解,我必须创建一个频道才能收听存储更改。

所以我有:

const storageBucketNotificationChannel = storage.channel('channelId', 'resourceId');

这是文档不再清晰的阈值,因为我无法弄清楚 channelId 一个 resourceId 代表什么。

我也不明白如何声明监听频道变化本身。是否有任何生命周期类型的方法可以这样做?

我可以这样做吗?

storageBucketNotificationChannel.onMessage(message => { ... })

【问题讨论】:

  • 大部分用户使用gsutil notification命令设置通知通道。您需要以编程方式进行吗?
  • 是的,我愿意。原因是我需要一个图像处理服务器。我很想利用 Firebase 的强大功能并使服务器由 Firebase“代理”(隐藏在 Firebase 后面)。因此,我希望服务器监听存储更改并在 child_add 上分别处理图像。 child_changed。通过在 Firebase 实时数据库上桥接问题,我确实为我的用例找到了解决方案,因为 Firebase 管理员 Node.js SDK 使设置我提到的查询变得非常简单。但由于它不是对问题的直接回答,所以我将线程保持打开状态。
  • 你真的很想试试 Google Cloud Functions (cloud.google.com/functions),它大大简化了这一切。有关如何处理 Firebase 存储上传和处理图像的示例,请参阅 github.com/mcdonamp/flaming-specs
  • 我还强烈建议您研究 Google Cloud Functions,因为它可能会满足您寻求的目的,并且基本上在 Node/NPM 上运行。 gcloud Node SDK 中的频道文档确实很精简。我会看看我能做些什么来测试这个可能会运行一个示例。我会向我们的文档团队提出。
  • 我已将an issue 提交给文档,要求将示例添加到参考中。如果它对您很重要,请随时支持此提交。与此同时,我必须获得一个有效的 SSL 证书才能自己测试这个,因为接收端点的this is a requirement

标签: javascript node.js firebase google-cloud-storage firebase-storage


【解决方案1】:

根据现有的documentation of the Google Cloud Node.js Clientthis Github issue的反馈,节点客户端目前无法创建频道或订阅对象更改通知。

其中一个原因是使用客户端的机器不一定是运行应用程序的机器,因此存在安全风险。但是,仍然可以订阅给定存储桶的对象更改通知,并让通知收到 Node.js GAE 应用程序。

使用对象:watchAll JSON API

使用gsutil订阅时,gsutil sends a POST request to https://www.googleapis.com/storage/v1/b/bucket/o/watch 其中bucket是要监视的bucket的名称。这本质上是JSON API Objects: watchAll 的包装。一旦所需的应用程序/端点如Notification Authorization 中所述被授权,就可以向所述API 发送适当的POST 请求,并在address 中提供所需的端点URL。例如,address 可以是 https://my-node-app.example.com/change

然后,Node/Express 应用程序服务需要侦听路径 /change 的 POST 请求以获取 notifications resembling this。然后应用程序将相应地对该数据采取行动。请注意,应用程序应响应Reliable Delivery 中所述的请求,以便云存储在失败时重试或在成功时停止重试。

【讨论】:

  • 有人有这个工作的例子吗?我正在尝试调试 firebase Cloud Function 并希望在节点中本地复制 require('firebase-functions').storage.onChange 事件。这似乎是正确的轨道。
  • 您是否遇到任何特定错误?你试过什么?根据内容,这可能值得自己提出问题。
猜你喜欢
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 2019-05-14
  • 2015-05-15
  • 2023-03-13
  • 2020-09-26
相关资源
最近更新 更多