5

我有一个包含多个模块的应用程序。一个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/webrequest而不使用dispatch.yaml重定向,一切都会按预期工作并使用http://server-dot-myapp.appspot.com/appengine.delay.Func调用_ah/queue/go/delay

4

1 回答 1

3

这是由于 App Engine 中的不一致造成的。有关详细信息,请参阅Google Groups讨论。

本质上不是使用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)
于 2013-11-10T20:45:11.357 回答