【问题标题】:Golang enqueue a method with task queuesGolang用任务队列排队一个方法
【发布时间】:2023-11-28 22:48:01
【问题描述】:

我是 golang 的新手,我正在使用这个任务队列库 google.golang.org/appengine/taskqueue 来排队任务。我试过排队一个 api 调用,看起来像这样(即,一个 PUT api 调用)

 taskqueue.Task{
  Path:    fmt.Sprintf(<endpoint>),
  Method:  "PUT",
  Payload: payload
}

但我想知道如何将除休息调用之外的任何其他方法排入队列。说,我有下面的方法 printHello ,我想在管道中稍后将其排入队列并执行。 有没有办法用任务队列做到这一点?

  func printHello(msg string){
    log.Infof("Doing some tasks here");
   }

我正在使用 golang 1.11.13

【问题讨论】:

  • 看起来与TaskQueue 一样,无法执行 HTTP 请求以外的任务。另请注意,TaskQueue 旨在执行用户请求之外的任务。或者,您可以探索计时器等。

标签: go google-cloud-platform task-queue


【解决方案1】:

借助任务队列,您可以使用 Cloud Task 将 HTTP 调用排入队列的 Google Cloud 产品。如果您想调用您的 printHello 函数,它必须是 HTTP 可调用的(因此在网络服务器中,可公开访问。可以通过 Google Coud 上的 IAM 进行保护)。

您不能将内部函数调用加入队列。

【讨论】:

  • 感谢您的回复。现在,我尝试对 localhost 的 rest api 调用进行排队,但端口号与运行应用程序的端口号不同。所以我给出了绝对路径(localhost:9200/es/index)。这不起作用,但应用程序内的相对路径有效。有这样的限制吗?
  • Cloud Task 是云端服务,通过互联网调用 API Endpoint。您的localhost URL 将如何解析? Cloud Task 不知道如何到达您的工作站!使用您的公共 IP 并确保您的内部路由器(您的互联网盒子)将流量路由到您的工作站?