在 PubSub 主题上使用 Cloud 运行

Using Cloud Run on a PubSub topic

我不清楚如何在 PubSub 主题上使用 Cloud 运行 来完成中等 运行 任务(当然在 Cloud 运行 的时间限制内.)

让我们看看这个取自教程[1]的例子:

app.post('/', (req, res) => {

  if (!req.body) {
    const msg = 'no Pub/Sub message received'
    console.error(`error: ${msg}`)
    res.status(400).send(`Bad Request: ${msg}`)
    return
  }
  if (!req.body.message) {
    const msg = 'invalid Pub/Sub message format'
    console.error(`error: ${msg}`)
    res.status(400).send(`Bad Request: ${msg}`)
    return
  }

  const pubSubMessage = req.body.message
  const name = pubSubMessage.data
    ? Buffer.from(pubSubMessage.data, 'base64').toString().trim()
    : 'World'

  console.log(`Hello ${name}!`)
  res.status(204).send()
})

我的疑问是:是否应该return HTTP 204 仅在任务完成后,否则任务会突然终止?

1 - https://cloud.google.com/run/docs/tutorials/pubsub

My doubt is: Should it return HTTP 204 only after the task finishes, otherwise the task will terminated sudden?

你别无选择。如果您 return 在 task/objective 完成之前,CPU 将闲置为零并且您的云 运行 实例中不会发生任何事情。

在您的示例中,您只是在处理 pub/sub 消息并提取名称。如果您在此之前 return 完成,则不会处理任何名称。

Cloud 运行 是为 HTTP Request/Response 系统设计的。这意味着处理在您收到 HTTP 请求(GET、POST、PUT 等)时开始,并在您的代码 return 一个 HTTP 响应(或只是 return 没有响应时结束).您可能会尝试创建后台线程,但不能保证它们会在您的主函数 returns.

后执行