在 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 仅在任务完成后,否则任务会突然终止?
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.
后执行
我不清楚如何在 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 仅在任务完成后,否则任务会突然终止?
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.
后执行