简体   繁体   中英

How do I execute App Engine Go SDK delay package on a different module?

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 .

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM