任务队列停止工作
我在玩谷歌应用引擎的任务队列API,想学习怎么用它。但是我在本地无法触发这个功能。我的应用在上传到谷歌服务器后运行得很好,但在本地却不行。我在管理界面看到的只是任务列表,但当它们的预计时间到了,任务就会被跳过。就好像它们在运行,但失败了,然后在等着重试。不过我在命令行上看不到这些事件。
当我在管理面板上点击“运行”时,它能成功运行,我也能在命令行上看到这些请求。我在Linux上使用的是App Engine SDK 1.3.4,搭配google-app-engine-django。我已经找了三个小时的问题,但还是没找到。调试GAE应用也很困难,因为调试信息不会出现在控制台上。
谢谢。
2 个回答
0
现在本地开发服务器支持队列了。在本地开发时,模块的一个技巧是,不是用不同的域名,而是把应用部署到本地的不同(动态)端口上。当你想把任务发送到队列时,需要添加队列监听的主机地址和队列的URL。下面是一个Java的例子(抱歉)。Python也有类似的方法:
ModulesService moduleService = ModulesServiceFactory.getModulesService();
String hostNameToQuery = moduleService.getVersionHostname("worker_module_name", null);
logger.info("hostNameToQuery=" + hostNameToQuery);
TaskOptions options = TaskOptions.Builder
.withUrl("/workerQueueURL")
.header("Host", hostNameToQuery)
.param("taskKey", taskKeyString)
.retryOptions(RetryOptions.Builder.withTaskRetryLimit(0));
如果这个方法对你有用,记得告诉我哦。
1
开发服务器不会自动运行任务,你需要自己手动启动它们。这是设计上的一个特点,这样你可以看到每次运行任务时发生了什么,而不是它们在任何时候都自动运行。
其实,你的应用程序没有问题,这只是开发服务器的一个功能。