如何通过Google Cloud Tasks Go客户端库指定执行延迟?

问题描述

我跟随this documentation创建了一个任务,并阅读了“您还可以微调该任务的配置,例如安排将来应执行的时间”。

但是,我仍然不清楚如何在我选择的延迟(time.Duration)中有效安排执行时间,例如“请在20分钟内触发这些对象的清理。”

相关的LOC是CreateTaskRequest创建和Task创建:

        req := &taskspb.CreateTaskRequest{
                Parent: queuePath,Task: &taskspb.Task{
                        MessageType: &taskspb.Task_HttpRequest{
                                HttpRequest: &taskspb.HttpRequest{
                                        HttpMethod: taskspb.HttpMethod_POST,Url:        url,},}
        createdTask,err := client.CreateTask(ctx,req)

我应该考虑为此使用Cloud Scheduler吗?

解决方法

您不需要Cloud Scheduler。

您要查找的是字段tasks.Task .ScheduleTime,类型为* {timestamppb.Timestamp

将您的time.Duration转换为将来的*timestamppb.Timestamp日期非常简单(此处忽略任何亚秒级精度):

        var d time.Duration = 20 * time.Minute
            
        ts := &timestamppb.Timestamp{
            Seconds: time.Now().Add(d).Unix(),},req := &taskspb.CreateTaskRequest{
                Parent: queuePath,Task: &taskspb.Task{
                        MessageType: &taskspb.Task_HttpRequest{
                                HttpRequest: &taskspb.HttpRequest{
                                        HttpMethod: taskspb.HttpMethod_POST,Url:        url,ScheduleTime: ts,}

以上内容适用于API v2