谷歌云任务在 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;
};

恩格罗克:

enter image description here

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 秒的尝试持续时间和“不可用”状态

log viewer

由于重新尝试收集更多“证据”,屏幕截图/日志的时间可能会有所不同

所有运行时间少于 5 分钟的作业都成功完成并且不会重新排队。我错过了什么吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)