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

时间:2013-11-04 22:01:42

标签: 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.yamlappengine.delay.Call重定向到使用delay package进行appengine.delay.Func的服务器模块。
  3. http://myapp.appspot.com/_ah/queue/go/delay - 我会在默认模块上调用appengine.delay.Func,而不是像我期望的那样调用http://server-dot-myapp.appspot.com/_ah/queue/go/delay
  4. 如何使用http://server-dot-myapp.appspot.com/_ah/queue/go/delay执行dispatch.yaml执行?

    请注意,如果我在不使用appengine.delay.Func重定向的情况下直接致电http://server-dot-myapp.appspot.com/api/webrequest,则所有内容都会按预期运行,并{{1}}调用{{1}}。

1 个答案:

答案 0 :(得分: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)