2013-11-04 12 views
5

Çeşitli modüller içeren bir uygulamanız var. Bir dispatch.yaml dosya benim modülü benim server modülüne tüm */api/* çağrıları yönlendirir.App Engine Go SDK gecikme paketini farklı bir modülde nasıl çalıştırırım?

aşağıdaki istek zinciri gerçekleşir:

  1. http://myapp.appspot.com/api/webrequest - biz varsayılan modülünde olduğunu unutmayın.
  2. http://server-dot-myapp.appspot.com/api/webrequest - appengine.delay.Call adresinin kullanıldığı dispatch.yaml numaralı sunucuya yeniden yönlendirme delay package kullanılarak yapılır.
  3. http://myapp.appspot.com/_ah/queue/go/delay - http://server-dot-myapp.appspot.com/_ah/queue/go/delay yerine beklendiği gibi varsayılan modülde appengine.delay.Func çağrılır.

appengine.delay.Funchttp://server-dot-myapp.appspot.com/_ah/queue/go/delay ile nasıl yürütebilirim? Ben dispatch.yaml yönlendirmesi kullanmadan doğrudan http://server-dot-myapp.appspot.com/api/webrequest ararsanız, her şey workes beklendiği gibi ve appengine.delay.Funchttp://server-dot-myapp.appspot.com/_ah/queue/go/delay ile çağrılan bu

Not.

cevap

2

Bu, App Engine'deki tutarsızlıktan kaynaklanmaktadır. Daha fazla bilgi için bkz. Google Groups.

Esasen yerine appengine.delay.Call kullanarak appengine.delay.Task kullanmak ve istediğiniz modül ana bilgisayar adına Host param ayarlayın:

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) 
+0

Bir böcek değil. "Appengine/delay" paketi, doğası gereği bir rahatlık paketidir. 'Call' yöntemi, varsayılan modülde görevi hedefler, çünkü çoğu insanın istediği şey budur; Gördüğünüz gibi, gönderildiği yer üzerinde daha fazla kontrole sahip olmak için 'Görev 'yöntemini kullanabilirsiniz. – dsymonds

+0

@dsymonds Muhtemelen appengine/delay'de bir hata olmadığını kabul ediyorum. Ancak, arama yönteminin, varsayılan olmayan modülde de bir istek işleyici tarafından yürütüldüğünde varsayılan olmayan modülü hedef almasının tutarsız olduğunu buluyorum. Ancak, aynı istek işleyicisi, dispatch.yaml içinden geçen bir istek aracılığıyla çağrılırsa, varsayılan olarak olmayan modülde de çalıştırılsa bile Çağrı yöntemi varsayılan modülü hedefler. Bu bir hata/gözetim olmalı? – Dan

+0

Genel olarak görev düzenlerinin nasıl çalıştığıyla ilgili küçük bir tuhaflık var, bu da 'appengine/delay' ifadesinin ne olduğu üzerine kurulu. Biraz beklenmedik katılıyorum, ama sanırım bazı uygulamaları bozmadan değiştirilemez bir şey. – dsymonds