有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java应用程序引擎动态后端在开发模式下未按预期运行

这个问题是在开发模式(Eclipse…)下测试并发生的

我有一个已配置的后端(backends.xml):

<backends>
    <backend name="example">
        <class>B8</class>
        <options>
            <instances>1</instances>
            <public>false</public>
            <dynamic>true</dynamic>
        </options>
    </backend>
</backends>

如您所见,它被显式设置为“动态”

这是我的网站。xml:

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <servlet>
        <servlet-name>backend_test</servlet-name>
        <servlet-class>BackendTest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>backend_test</servlet-name>
        <url-pattern>/_ah/start</url-pattern>
    </servlet-mapping>

</web-app>

。。指向常规后端servlet的入口

下面是后端的Java代码:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class BackendTest extends HttpServlet
{

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException
    {
        System.out.println("Backend started!");

        // ............

        System.out.println("Backend terminating!");
    }
}

现在,当我点击F11并开始调试应用程序时,控制台中的输出如下:

INFO: The server is running at http://localhost:8888/
Backend started!
Backend terminating!

如果我正确理解了this doc line,它就不应该启动,直到我请求/_ah/start(http)。 它清楚地说:

When you start a dynamic backend, App Engine allows it to accept traffic, but the /_ah/start request is not sent to an instance until it receives its first user request.

与此问题相关的另一个副作用是后端似乎从未“停止”,我的意思是它仍然处于“运行”状态(正如我在http://127.0.0.1:8888/_ah/admin/backends的管理区域中看到的)
在它被终止后(在上面的代码中,正如它在控制台中清楚地打印出来的那样),它不应该在几分钟后关闭吗?(我等了大约20分钟)

我做错了什么

顺便说一下,我的最终目标是在“后端”上下文中运行一些代码,就像运行“任务”一样。我想要一个“后端”,因为CPU/RAM的能力和没有时间限制

请开导我。 谢谢


共 (1) 个答案

  1. # 1 楼答案

    SDK并不总是准确地反映生产环境。启动和关闭后端很可能就是这种情况的一个方面

    如果您发现后端在生产中的行为符合预期,请file a bug获取SDK