appengine后端关机是否随机挂钩?

时间:2013-07-30 09:58:37

标签: java google-app-engine

我遇到关机代码问题。所以我做了一个最小的后端servlet来测试它。

那里的任何人都知道关闭钩子是否可靠!?

我的日志目前根本没有显示任何 _ah / stop 行。

我怀疑它可能与日志消失有关但想要确认。即 ApiProxi.flushLogs()在关机模式下不起作用。

一个有趣的说法是,当我生气并重复这一行(15次)......

            log.info("LIFECYCLE - Shutdown hook invoked");

...我看到 _ah / stop 行。

@Override
public void destroy() {
    super.destroy();
    log.info("LIFECYCLE - Shutting down");
    ApiProxy.flushLogs();
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    log.info("doGet()");
    ApiProxy.flushLogs();
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    log.info("doPost()");
    ApiProxy.flushLogs();
}




@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
    log.info("LIFECYCLE - Starting up");
    ApiProxy.flushLogs();
    LifecycleManager.getInstance().setShutdownHook(new ShutdownHook() {
        public void shutdown() {
            log.info("LIFECYCLE - Shutdown hook invoked");
            ApiProxy.flushLogs();
        }
    });
}
@Override
public void destroy() {
    super.destroy();
    log.info("LIFECYCLE - Shutting down");
    ApiProxy.flushLogs();
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    log.info("doGet()");
    ApiProxy.flushLogs();
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    log.info("doPost()");
    ApiProxy.flushLogs();
}

2 个答案:

答案 0 :(得分:0)

您是否阅读过手册?

https://developers.google.com/appengine/docs/java/backends/?hl=en#Shutdown

您可以手动关闭后端以触发关机处理程序。但是,是的,它们可以随机发生。

答案 1 :(得分:0)

似乎无法保证调用关机处理程序。这几乎一直发生在我的应用程序中。我正在使用python2.7并注册一个关闭处理程序来记录一些信息。不会在95%的时间内被召唤。后端日志表示,由于后端需要很长时间才能关闭,因此进程终止。