Tomcatのパイプラインのバルブ・独創的なデザインを吸う猫吸います

序文

各Javaエンジニアの場合、クレメンタインの猫は、Tomcatのみ私たちの古くからの友人であること、および内部ロジック処理のための強力なスケーラビリティ、リクエストとレスポンスとTomcatサーバーミドルウェアと同時に方法がありますそれを達成するには?この記事では何Tomcatを見るためにパイプライン・バルブの設計に焦点を当てます。

インターフェイス説明

まず、バルブのインターフェイスを見て

画像-20190526123653021

あなたは私たちがバルブバルブに応じてチェーンを構築することができ、シャドーバルブのリストから多くを見ることができます。そして、ルックパイプライン・インタフェースを取ります

mainメソッドパイプラインインタフェース

画像-20190526120956032

パイプラインは、私たちが従ってソースコードを見てみましょう(バルブ)setBasic二つの主要な方法があるうちに、検索操作弁を変更するには追加および削除を提供する主な方法を参照してaddValve(バルブ)することができます。StandardPipelineパイプラインインタフェースの実装クラスどれ、ここで私はコアロジックsetBasicを傍受し、我々はバルブの一番最後に基本的な事実パイプラインのバルブメンテナンス・チェーンを見ることができます

Valve current = first;
while (current != null) {
if (current.getNext() == oldBasic) {
current.setNext(valve);
break;
}
current = current.getNext();
}

this.basic = valve;
复制代码

さんがaddValveで同じソースを見てみましょう、以下が最も中心部分であります

Valve current = first;
while (current != null) {
if (current.getNext() == basic) {
current.setNext(valve);
valve.setNext(basic);
break;
}
复制代码

addValveすることにより、基本的なポイントは、常にバルブバルブは、それが簡単にそれがどのようなこのデザイン、その後で置き換えられませんチェーンの最後であることを、バルブが基本の前に追加された追加?答えは〜によって与えられます

最後に、バルブは何ですか?

画像-20190526133007212

図バルブ上部クラスインターフェースは、ロードバランシング、シングルサイン論理Tomcatコンテナ自体を含む、実現されます。バルブインターフェースが知っているかもしれないメソッドを呼び出す達成するために見ていることで、バルブは、主に2つのことを行うすべてのメソッドを呼び出します

  1. ロジックそのもの
  2. getNextをすることで()。(リクエスト、レスポンス)バルブの次のコール・ロジックを起動します

これは責任のデザインパターンの古典的なチェーンです。簡単に言えば、バルブは、論理的なボディです。

基本的なトラッキング

画像-20190526125355280

消費者は、主にTomcatを導入する4つのコンテナに4つのコンテナ、コンテキスト、エンジン、ホストとラッパー、簡単に構築されたsetBasicを見ることができます

  • ラッパー:アセンブリの概念のサーブレット定義、サーブレットラッパーの代表
  • コンテキスト:、などのJava Webプログラムを実行すると、自然に複数のサーブレットを持っているプログラムを、私たちのアプリケーションを表現するため、関係Conxtetは1とn-ラッパーであるために
  • ホスト:概念仮想ホスト、サーバはproduct.yangkw.comにサービスを提供することができます、だけでなく、各仮想ホストは、複数のJava Webプログラムを実行することができながら、そう、test.yangkw.comのためのサービスを提供することができないという理由だけでコンテキストは、ホストとNの一組の間の関係であります
  • エンジン:Tomcatのコネクタ(コネクタ)は、受信した接続エンジンプロセスに提出される、仮想複数のサイトを管理するために使用されるサーブレットエンジン部品の全体概念、エンジンホストとnの関係であります

ここでは4つのコンテナは、単純なクラス間の関係を示しています

画像-20190526131102483

それでは、どのように4つのコンテナは、それに関連付けられていますか?StandardEngineValveは、基本的なバルブエンジン容器であるコード作成者は、メイン論理保持を実現簡素化

@Override
public final void invoke(Request request, Response response)
throws IOException, ServletException {

// Select the Host to be used for this Request
Host host = request.getHost();

...
// Ask this Host to process this request
host.getPipeline().getFirst().invoke(request, response);

}
复制代码

:あなたは、ホストの血管パイプラインの答えをトリガするための責任基本的なバルブエンジン船が出てきた見ることができる基本的なバルブの各コンテナは、パイプラインのサブコンテナをトリガするために行くだろう、それぞれの論理を実行するだけでなく、バルブように基本的な、だけでなく、外交を担っていますそして、政府の役割は、その論理サブコンテナのドッキングに責任があります。

概要

IMG

  • パイプラインは、容器弁として見ることができます
  • 4つのコンテナ各コンテナには、独自のパイプラインのメンテナンスを持っています
  • サブコンテナをトリガするための基本的な責任が第一バルブ
  • ラッパーは、基本的なコール・フィルタに移動し、サーブレットロジックを実行します
  • それれるFilterChainは、運用レベルであり、パイプライン、バルブにtomcatに自分のレベルがあり除きれるFilterChainとパイプライン・バルブは、非常によく似ています。

参考資料

  • 「Tomcatのアーキテクチャ分析」
  • タイムオタク「徹底解体のTomcat&桟橋」

おすすめ

転載: juejin.im/post/5ceb42f5e51d45775a700286
おすすめ