firebase - 以编程方式在 firebase 云功能中激活重试

标签 firebase google-cloud-firestore google-cloud-functions

我正在部署 Firebase 云功能,以通过持续部署来监听我们的 Firestore 中的变化。

我只能找到激活重试的方法 manually .这与我们的 cd 方法相反。

看着正常gcp cloud functions部署时可以给出重试标志。但是我在 firebase-cli 或 firebase-functions 界面 (2.1.0) 中找不到类似的选项

有关如何解决此问题的任何提示?
卡斯腾

最佳答案

您可以使用 GCloud 控制台手动在 Firebase 函数中启用重试。在 firebase-functions 中添加了以编程方式重试基于触发器的函数3.10.0(见 changelog 和相关的 pull request)。
由于从 PR 或文档中并不完全明显,这里是语法的一个简单示例:

export const myFirebaseFunc = functions
  .runWith({
    failurePolicy: {
      retry: {},
    },
    memory: '512MB',
    timeoutSeconds: 60,
  })
  .firestore.document('/path/to/some/doc')
  .onCreate(async (snap, context) => {
   /* do stuff */
 })
在撰写本文时,故障策略似乎只是打开或关闭。因此,这是等价的
export const myFirebaseFunc = functions
  .runWith({
    failurePolicy: true,
    memory: '512MB',
    timeoutSeconds: 60,
  })
  .firestore.document('/path/to/some/doc')
  .onCreate(async (snap, context) => {
   /* do stuff */
 })
一些注意事项:
  • 您还必须使用 --force 进行部署
  • 您只能对触发的函数启用重试,而不能对 http 调用的函数启用重试。
  • 不建立一些保护措施是愚蠢的。重试策略最长为 7 天,并且与任何其他函数调用一样计费,因此如果您有一些未处理的错误,它可能会重复运行整整一周。您可以使用 context.eventTimestamp知道第一次尝试大概是什么时候开始的。

  • 请阅读:https://firebase.google.com/docs/functions/retries并确保您的功能是幂等的。
    也很难发现返回什么来强制重试或避免重​​试。
    触发的 Firebase 函数必须返回一个 Promise。 (见此 vid)
    如果出现以下情况,启用重试的 Firebase 函数将重试:
  • 它返回一个被拒绝的 promise
  • 抛出异常
  • 或者函数超时

  • 这意味着,如果您遇到一个错误,而您知道该错误最终不会通过重试自行解决(即您想停止函数执行而不是重试),您可以返回 Promise.resolve({message: 'some message'});

    关于firebase - 以编程方式在 firebase 云功能中激活重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55606808/

    相关文章:

    angularjs - 火力地堡一次(): Use success and failure callbacks

    javascript - 将 firebaseDB 中的数据与云函数结合使用

    swift - Firebase 和 Swift 的重置密码问题

    java - Firebase Cloud Firestore : Invalid collection reference. 集合引用必须有奇数个段

    firebase - 应如何为 Firestore REST API (v1beta1) 构建 "write"请求?

    firebase - Firestore 查询费用

    java - 在 RecyclerView 中从 Firebase 加载图像时出现问题

    java - 如何解决 Android Studio Firebase 问题?

    javascript - Firebase 函数将日期时间存储为 map

    firebase - 找不到模块 '@google-cloud/logging'