1

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

让我们看一下取自教程 [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()
})

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

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

4

1 回答 1

3

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

你别无选择。如果您在任务/目标完成之前返回,CPU 将空闲到零,并且您的 Cloud Run 实例不会发生任何事情。

在您的示例中,您只是在处理发布/订阅消息并提取名称。如果您在完成之前返回,则不会处理任何名称。

Cloud Run 专为 HTTP 请求/响应系统而设计。这意味着处理在您收到 HTTP 请求(GET、POST、PUT 等)时开始,并在您的代码返回 HTTP 响应(或仅返回没有响应)时结束。您可能会尝试创建后台线程,但不能保证它们会在您的主函数返回后执行。

于 2019-07-06T04:22:00.703 回答