问题描述
基础设施: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 (将#修改为@)