热身请求无法在Cloud Endpoints Objectify中工作

时间:2017-05-08 03:04:03

标签: google-app-engine google-cloud-endpoints objectify

我一直试图使用Objectify在我的Endpoints项目中获得热身请求,但似乎没有任何效果。我错过了什么吗?我尝试了两种方法:

的servlet:

 public class WarmUpServ extends HttpServlet {

        static {
            ObjectifyService.factory().register(CounterEnt.class);
            ObjectifyService.factory().register(CounterShard.class);
        }

        @Override
        public void init() throws ServletException {
            super.init();
        }

        @Override
        public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException,IOException {

        }

        @Override
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        }
    }

的web.xml

<servlet>
    <servlet-name>warm-up</servlet-name>
    <servlet-class>com.myapp.backend.WarmUpServ</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>warm-up</servlet-name>
    <url-pattern>/war-up</url-pattern>
</servlet-mapping>

我也试过一个听众:

public class WarmUpServListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ObjectifyService.factory().register(CounterEnt.class);
        ObjectifyService.factory().register(CounterShard.class);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }
}

的web.xml

<listener>
    <listener-class>com.myapp.backend.WarmUpServListener</listener-class>
</listener>

注意:我需要以这种方式注册我的实体,因为我有一个直接使用ObjectifyService的依赖项。

1 个答案:

答案 0 :(得分:1)

不保证提出预热请求。

https://cloud.google.com/appengine/docs/standard/java/warmup-requests/

  

如果为您的应用程序App Engine启用了预热请求   尝试检测应用程序何时需要新实例   启动预热请求以初始化新实例。然而,   这些检测尝试在每种情况下都不起作用。结果,你   即使启用了预热请求,也可能会遇到加载请求   在你的应用程序中例如,如果您的应用没有提供流量,那么第一个   对应用程序的请求始终是加载请求,而不是预热   请求。

使用ServletContextListener代替;在每个实例开始时将始终调用一次。