如何解决谷歌云任务在 5 分钟后重新排队任务,忽略更大的 dispatchDeadline 设置
基础设施:Firebase 函数,用于对 Google Cloud Task 项目和执行一些长时间运行的作业的本地 NodeJS Express 应用进行排队。出于调试目的,我使用 ngrok 将任务隧道传输到我的本地应用
GC 任务文档声明默认超时为 10 分钟,可以调整为 15 秒到 30 分钟之间的任何时间。但是对于略长于 5 分钟的作业,我收到了另一个请求,尽管前一个请求尚未完成。
在我的 nodejs 应用程序中,我使用 @google-cloud/tasks
包来创建任务。我尝试过默认设置(无 dispatchDeadline
)和自定义设置(见下面的代码)
export const createQueueClient = (ref: string) => {
const client = new google.CloudTasksClient();
return {
client,parent: client.queuePath(project,region,ref),};
};
export const postMessageToQueue = async <T>(
queue: QueueNamesType,url: string,message: T,context: functions.https.CallableContext
) => {
const { client,parent } = createQueueClient(queue);
const [response] = await client.createTask({
task: {
dispatchDeadline: {
seconds: 15 * 60,// <------------------- attempt to set a timeout value
},httpRequest: {
httpMethod: 'POST',url: url,body: Buffer.from(
JSON.stringify({
data: message,})
).toString('base64'),headers: {
// forward auth header to next service
Authorization: context.rawRequest.header('Authorization') || '','Content-Type': 'application/json',},parent: parent,});
return response;
};
恩格罗克:
nodejs 应用日志,可以清楚地看到请求之间有 5 分钟的差异:
[[11:46:31.084]] [LOG] Received request
[[11:51:31.317]] [LOG] Received request
[[11:51:34.006]] [LOG] Finished request iCg7raEbrw6LlbBhjpBS
我启用了登录面板,但我看到 300 秒的尝试持续时间和“不可用”状态
由于重新尝试收集更多“证据”,屏幕截图/日志的时间可能会有所不同
所有运行时间少于 5 分钟的作业都成功完成并且不会重新排队。我错过了什么吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。