由于重试次数过多,Google App Engine cron作业有时会失败

时间:2013-08-13 19:35:45

标签: java google-app-engine cron

我有一个Google App Engine cron作业,经常(但并非总是)失败,因为已经达到了java servlet的最大重试次数。 Google App Engine应用程序正常工作。

我的servlet如下所示,它通常会达到“太多的重试次数”,但并非总是如此。

计划每隔几个小时运行一次,似乎可能因为等待应用程序启动实例而失败,但我不确定。

我该如何解决这个问题?只是增加重试次数?如何进行调试以了解导致“重试次数过多”的原因?

public class SomeServlet extends BaseServlet {

        private static final String HEADER_QUEUE_COUNT = "X-AppEngine-TaskRetryCount";
        ...
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                        throws IOException {

                String retryCountHeader = req.getHeader(HEADER_QUEUE_COUNT);

                if (retryCountHeader != null) {
                        int retryCount = Integer.parseInt(retryCountHeader);
                        if (retryCount > 10) {
                                logger.severe("Too many retries, dropping task...");
                                taskDone(resp);
                                return;
                        }
                }
             ...
        }

1 个答案:

答案 0 :(得分:0)

失败,因为每次执行cron任务时retryCount都会继续递增。无法控制Google App Engine cron任务的重试次数。在上面的示例中,一旦执行了10个cron作业,servlet将到达“Too many retries”点。

如果需要重试控制,只需删除retryCount测试并在cron作业中排队一个真正的GAE任务。