【问题标题】:embedded jetty cannot be connected嵌入式码头无法连接
【发布时间】:2014-11-05 09:49:31
【问题描述】:

在应用程序中嵌入了带有以下代码的码头,但无法请求成功。 它一直在等待。

public static class TestHandler extends ContextHandler {
    public TestHandler(String contextPath) {
        super(contextPath);
    }

    @Override
    public void doHandle(String target, Request baseRequest, HttpServletRequest request,
            HttpServletResponse response) throws IOException, ServletException {
        super.doHandle(target, baseRequest, request, response);
        System.out.println("");
    }
}

public static void main(String[] args) throws Exception {

    Server server = new Server(new QueuedThreadPool(5, 4));
    ServerConnector connector = new ServerConnector(server);
    connector.setPort(9001);
    server.setConnectors(new Connector[] { connector });

    HandlerCollection handler = new HandlerCollection();
    ContextHandlerCollection contexts = new ContextHandlerCollection();
    contexts.setHandlers(new Handler[] { new TestHandler("/test") });

    handler.setHandlers(new Handler[] { contexts, new DefaultHandler() });
    server.setHandler(handler);
    server.start();
    server.dumpStdErr();
    server.join();
}

但是将服务器构造函数更改为另一个,就可以了,有人可以解释原因吗? 我查了代码,找不到原因。谢谢!!

public static void main(String[] args) throws Exception {
    Server server = new Server(9001);

    // Server server = new Server(new QueuedThreadPool(5, 4));
    // ServerConnector connector = new ServerConnector(server);
    // connector.setPort(9001);
    // server.setConnectors(new Connector[] { connector });

    HandlerCollection handler = new HandlerCollection();
    ContextHandlerCollection contexts = new ContextHandlerCollection();
    contexts.setHandlers(new Handler[] { new TestHandler("/test") });

    handler.setHandlers(new Handler[] { contexts, new DefaultHandler() });
    server.setHandler(handler);
    server.start();
    server.dumpStdErr();
    server.join();
}

ps:使用 jetty-server 9.1.0.M0 版本

【问题讨论】:

    标签: java jetty server


    【解决方案1】:

    你需要在线程池中至少有 6 个:

    "线程不足:max=5

    将构造函数改成这样:

    Server server = new Server(new QueuedThreadPool(60, 6));
    

    更新:

    我的 logback.xml (src/main/resources)

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="false" scanPeriod="10 seconds">
    
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <Target>System.out</Target>
        <encoder>
            <pattern>%p %d{HH:mm:ss} [%c{1}] - %m%n</pattern>
        </encoder>
    </appender>
    
    <logger name="org.eclipse.jetty" level="DEBUG" />
    
    <root level="INFO">
        <appender-ref ref="stdout" />
    </root>
    

    堆栈跟踪:

    ...
    INFO 11:25:18 [o.e.j.s.Server] - jetty-9.3.0.M0
    WARN 11:25:18 [o.e.j.u.c.AbstractLifeCycle] - FAILED org.eclipse.jetty.server.Server@9f10da5d: java.lang.IllegalStateException: Insufficient threads: max=5 < needed(acceptors=1 + selectors=4 + request=1)
    java.lang.IllegalStateException: Insufficient threads: max=5 < needed(acceptors=1 + selectors=4 + request=1)
    at org.eclipse.jetty.server.Server.doStart(Server.java:351) ~[jetty-server-9.3.0.M0.jar:9.3.0.M0]
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ~[jetty-util-9.3.0.M0.jar:9.3.0.M0]
    at TestHandler.main(TestHandler.java:43) [classes/:na]
    Exception in thread "main" java.lang.IllegalStateException: Insufficient threads: max=5 < needed(acceptors=1 + selectors=4 + request=1)
    at org.eclipse.jetty.server.Server.doStart(Server.java:351)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at TestHandler.main(TestHandler.java:43)
    

    【讨论】:

    • 我将日志级别更改为 DEBUG,没有找到该消息,该消息存在于哪个 java 文件中?谢谢
    • 我使用 Slf4J + Logback 作为日志框架。我认为您的应用程序的某些消息没有被记录,请参阅here
    • 我也用过slf4j+logback
    • 你能贴一下logback.xml的内容吗,我把级别改成TRACE了,也找到了警告信息
    • 低线程数仅对单元测试单个请求非常有用。这将严重损害正常的生产性能。对于生产来说,考虑一个更有意义的价值。
    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2019-09-25
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多