异步URL提取(如果无阻塞则重试)

时间:2013-03-19 09:38:51

标签: java multithreading google-app-engine

我正在使用异步url fetch调用来访问外部服务器的信息,同时进行其他处理。我希望能够重试调用或将url更改为备份URL,如果原始异步url fetch调用失败而不返回原始(主)线程,因为它忙于执行其他操作。这样做的最好方法是生成一个执行同步url fetch的辅助线程(我猜这个工作我必须暂停/恢复在两个线程之间切换,因为app引擎不是多核的)?或者,在重试url fetch操作之前,等待主线程完成它正在做的所有事情是否更好?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用运行同步URLFetch的辅助线程在您的用例中可以正常运行。从开发人员的角度来看,拥有非多核CPU不会影响线程的操作,因为JVM和/或操作系统会为您处理。

一个小小的警告,因为GAE是一个沙盒环境,你需要通过Google的API创建线程。如果您还没有,可以在here中看到有关如何生成App Engine线程的简短文档。

请注意,生成的线程的生命周期限制为原始请求的生命周期。 (即前端实例请求为60秒)另一个好主意是在辅助线程上使用the request timer定期检查剩余的可用时间,然后再进行第二次URLFetch调用,这样您就可以调整超时限制或提出请求如果没有足够的时间,请优雅地终止。