我有一个包含多个模块的应用程序。 dispatch.yaml
文件将所有 */api/*
调用从我的 default
模块路由到我的 server
模块。
发生以下请求链:
- http://myapp.appspot.com/api/webrequest - 注意我们在默认模块上。
- http://server-dot-myapp.appspot.com/api/webrequest - 使用
dispatch.yaml
重定向到使用 delay package 进行appengine.delay.Call
的服务器模块. - 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
重定向,一切都按预期工作,appengine.delay.Func
被调用 http://server-dot-myapp.appspot.com/_ah/queue/go/delay .
最佳答案
这是由于 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)
关于google-app-engine - 如何在不同的模块上执行 App Engine Go SDK 延迟包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19778059/