我有一个包含多个模块的应用程序。 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.Funchttp://server-dot-myapp.appspot.com/_ah/queue/go/delay一起执行?

    请注意,如果我不使用dispatch.yaml重定向直接调用http://server-dot-myapp.appspot.com/api/webrequest,那么一切都会按预期工作,并且使用http://server-dot-myapp.appspot.com/_ah/queue/go/delay调用了appengine.delay.Func

    最佳答案

    这是由于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/

    10-12 22:27