在 PubSub 主题上使用 Cloud Run
Posted
技术标签:
【中文标题】在 PubSub 主题上使用 Cloud Run【英文标题】:Using Cloud Run on a PubSub topic 【发布时间】:2019-11-16 01:25:35 【问题描述】:我不清楚如何 来执行中等运行任务(当然,在 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
【问题讨论】:
【参考方案1】:我的疑问是:它是否应该仅在任务完成后才返回 HTTP 204, 否则任务会突然终止?
您别无选择。如果您在任务/目标完成之前返回,CPU 将空闲到零,并且您的 Cloud Run 实例不会发生任何事情。
在您的示例中,您只是在处理发布/订阅消息并提取名称。如果您在完成之前返回,则不会处理任何名称。
Cloud Run 专为 HTTP 请求/响应系统而设计。这意味着处理在您收到 HTTP 请求(GET、POST、PUT 等)时开始,并在您的代码返回 HTTP 响应(或仅返回没有响应)时结束。您可能会尝试创建后台线程,但不能保证它们会在您的主函数返回后执行。
【讨论】:
以上是关于在 PubSub 主题上使用 Cloud Run的主要内容,如果未能解决你的问题,请参考以下文章
排空或清除 Google Cloud pubsub 主题的最佳做法 [关闭]
来自 PubSub 主题的 Google Cloud 函数触发器是订阅吗
Firebase Emulator Cloud Functions + PubSub 订阅生产主题
如何使用 Node.js 控制 Cloud PubSub 中的确认