doucu7525
2013-11-04 22:01
浏览 39
已采纳

如何在其他模块上执行App Engine Go SDK延迟程序包?

I have an app with several modules. A dispatch.yaml file routes all */api/* calls from my default module to my server module.

The following request chain happens:

  1. http://myapp.appspot.com/api/webrequest - Note we are on the default module.
  2. http://server-dot-myapp.appspot.com/api/webrequest - Redirection with dispatch.yaml to the server module where appengine.delay.Call is made using the delay package.
  3. http://myapp.appspot.com/_ah/queue/go/delay - The appengine.delay.Func is called on the default module instead of http://server-dot-myapp.appspot.com/_ah/queue/go/delay like I would expect.

How can I make my appengine.delay.Func execute with http://server-dot-myapp.appspot.com/_ah/queue/go/delay?

Note that if I call http://server-dot-myapp.appspot.com/api/webrequest directly without using the dispatch.yaml redirect, everything workes as expected and appengine.delay.Func gets called with http://server-dot-myapp.appspot.com/_ah/queue/go/delay.

图片转代码服务由CSDN问答提供 功能建议

我有一个包含多个模块的应用程序。 一个 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 的服务器模块 delay“ rel =” nofollow“>延迟包。
  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 执行 =“ nofollow”> 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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongxian8858 2013-11-10 20:45
    已采纳

    This is due to an incongruity in App Engine. See Google Groups discussion for further information.

    Essentially instead of using appengine.delay.Call you use appengine.delay.Task and set the Host param to the module host name you want:

    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)
    
    点赞 评论