我的嵌入式jetty应用程序(使用6.1.26 jetty)有2个上下文处理程序注册到它。两者都在同一端口侦听。示例如下:
Server s = new Server();
Connector c = new SelectChannelConnector();
((SelectChannelConnector)connector).setAcceptors(2);
connector.setHost(IP);
connector.setPort(port);
server.addConnector(connector);
ContextHandler context1 = new ContextHandler();
context.setContextPath("/abc");
context.setHandler(handler1);
context.setAllowNullPathInfo(true);
ContextHandler context2 = new ContextHandler();
context2.setContextPath("/xyz");
context2.setHandler(handler2);
context2.setAllowNullPathInfo(true);
ContextHandlerCollection hc = new ContextHandlerCollection();
hc.addHandler(context1);
hc.addHandler(context2);
server.setHandler(hc);
server.start();
我还使用了一个线程池,它设置在服务器级别。当我向一个上下文中发送请求并对其加载以便使用所有线程时,当我向第二个上下文中发送请求时,它需要时间来处理对第二个上下文中的请求。
我还尝试在SelectChannelConnector级别设置线程池并尝试。还尝试了使用相同的主机/端口添加更多的连接器,以便每个连接器都有自己的线程池。
我的要求是,当一个上下文处于负载状态时,其他上下文(但端口相同)不应该延迟处理。
我可以为每个上下文设置专用线程池吗?还有其他的工作吗?感谢您的回复。
谢谢Sarath
使用Jetty, ThreadPool位于连接器级别,您不能有两个不同的ThreadPool来处理不同的上下文。当连接器接受请求时,它从ThreadPool中提取一个线程,并将其传递给Server.getHandler()链。此时,它将遍历处理程序的层次结构,直到其中一个上下文被使用。
这意味着上下文的知识来得太晚,无法分割线程池。
您是否尝试过升级到Jetty 8或Jetty 9并使用异步处理?
或者您是否尝试过在Jetty 7,8或9中使用QoSFilter来更好地优先处理?