我的嵌入式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级别设置线程池并尝试。 还尝试使用相同的主机/端口添加更多连接器,以便每个连接器都有自己的线程池。
我的要求是其他上下文(但端口相同)不应该在一个上下文加载时延迟处理。
我可以为每个上下文设置专用线程池。还有其他工作吗? 感谢回复。
由于 萨拉
答案 0 :(得分:0)
使用Jetty,ThreadPool处于连接器级别,您不能拥有2个不同的ThreadPools来处理不同的上下文。当连接器接受请求时,它从ThreadPool中提取一个Thread,并将其交给Server.getHandler()链。此时它将通过处理程序的层次结构,直到使用您的某个上下文。
这意味着对于分离ThreadPools而言,对上下文的了解为时已晚。
您是否尝试升级到Jetty 8或Jetty 9并改为使用Async processing?
或者您是否尝试过使用Jetty 7,8或9中的QoSFilter来更好地优先处理?