2016-11-08 10 views
1

私はUndertowでSpring Bootを使用しており、Undertowが受け入れる要求の数にストレスをかけて過負荷にならないようにしています。Spring Boot Undertow DeploymentInfoにRequestLimitingHandlerを追加します

私はSpring Boot Undertow add both blocking handler and NIO handler in the same applicationの質問に対する答えを見てきましたが、これは有望ですが、RequestLimitingHandlerコンストラクタの引数としてHttpHandlerを渡すべきかどうかは不明です。

おそらくaddDeploymentInfoCustomizersメソッドを使用して、UndertowEmbeddedServletContainerFactory BeanにRequestLimitingHandlerを追加する簡単な方法はありますか?

また、UndertowのベースとなるXnioコードを調べると、Options.WORKER_TASK_LIMITを設定するオプションがあるようですが、さらに調査すると、XnioWorkerクラスがこの設定を無視したようです3.0.10.GAリリースでは、単にtaskQueueを無制限のLinkedBlockingQueueに設定します。私は間違っていますか?また、これもオプションになりますか?

答えて

1

将来的に他人を助ける場合は、自分の質問に答える。解決策は、新しいUndertow HandlerWrapperを作成し、wrap()メソッド内で新しいRequestLimitingHandlerオブジェクトをインスタンス化することです。

@Bean 
public UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory(RootHandler rootHandler) { 
    UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory(); 

    factory.addDeploymentInfoCustomizers(deploymentInfo -> deploymentInfo.addInitialHandlerChainWrapper(new HandlerWrapper() { 

     @Override 
     public HttpHandler wrap(HttpHandler handler) { 
      return new RequestLimitingHandler(maxConcurrentRequests, queueSize, handler); 
     } 

    })); 

    return factory; 
} 
関連する問題