0

埋め込まれた 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();

サーバーレベルで設定されたスレッドプールも使用しています。1 つのコンテキストにリクエストを送信し、すべてのスレッドが使用されるように負荷をかけると、2 番目のコンテキストにリクエストを送信すると、2 番目のコンテキストへのリクエストを処理するのに時間がかかります。

私もSelectChannelConnectorレベルでスレッドプールを設定して試してみました。また、同じホスト/ポートを使用してコネクタを追加して、それぞれが独自のスレッド プールを持つようにしてみました。

私の要件は、1 つのコンテキストに負荷がかかっているときに、他のコンテキスト (ポートは同じ) が処理を遅らせてはならないということです。

コンテキストごとに専用のスレッド プールを使用できますか? 他の回避策はありますか。これへの返信に感謝します。

ありがとうサラス

4

1 に答える 1

0

Jetty では、ThreadPool はコネクタ レベルにあり、異なるコンテキストを処理するために 2 つの異なる ThreadPool を持つことはできません。コネクターが要求を受け入れると、ThreadPool からスレッドをプルし、それを Server.getHandler() チェーンに渡します。その時点で、コンテキストの 1 つが使用されるまで、ハンドラーの階層を通過します。

これは、コンテキストの認識が遅すぎて ThreadPools を分割できないことを意味します。

Jetty 8 または Jetty 9 にアップグレードして、代わりに非同期処理を使用してみましたか?

または、Jetty 7、8、または 9 でQoSFilterを使用して、処理の優先順位を上げてみましたか?

于 2013-03-27T15:54:15.287 に答える