如何在不同的模块上执行App Engine Go SDK延迟包?

Dan*_*Dan 5 google-app-engine go

我有一个有几个模块的应用程序.一个dispatch.yaml文件的所有航线*/api/*从我的电话default模块到我的server模块.

发生以下请求链:

  1. http://myapp.appspot.com/api/webrequest - 注意我们在默认模块上.
  2. http://server-dot-myapp.appspot.com/api/webrequest - 使用延迟包重定向dispatch.yaml到服务器模块.appengine.delay.Call
  3. http://myapp.appspot.com/_ah/queue/go/delay - appengine.delay.Func调用默认模块而不是http://server-dot-myapp.appspot.com/_ah/queue/go/delay,就像我一样期待.

如何appengine.delay.Func使用http://server-dot-myapp.appspot.com/_ah/queue/go/delay进行执行?

请注意,如果我在不使用重定向的情况下直接调用http://server-dot-myapp.appspot.com/api/webrequestdispatch.yaml,则一切都按预期工作,并appengine.delay.Func通过http://server-dot-myapp.appspot.com/进行调用_ah/queue/go/delay.

Dan*_*Dan 3

这是由于 App Engine 中的不协调造成的。请参阅Google 网上论坛讨论以获取更多信息。

appengine.delay.Call本质上,您不使用而是使用appengine.delay.Task并将Host参数设置为您想要的模块主机名:

t := myDelayFunc.Task("myparam")
t.Header = make(map[string][]string)

hostName, err := appengine.ModuleHostname(context, "[your module name]", "", "")
t.Header.Set("Host", hostName)
taskqueue.Add(context, t)
Run Code Online (Sandbox Code Playgroud)