SpringCloud設定:
1、動的リフレッシュ設定:呼び出してジョブセットの<string>キー= contextRefresher.refresh( )コードとすることができます。
2、カスタムヘルスチェックを実装する方法:書き換えAbstractHealthIndicatorその上doHealthCheck方法。
参照:https://www.cnblogs.com/bzfsdr/p/11589902.html
SpringCloud Netflixのユーレカ:
1、サービスの発見:サービス検出二つのモード、主な違いは、ということであるメインロジックは誰が決定します。
- クライアントモード:他のサービスを呼び出すサービスのリストを取得するにはまず登録センターを、そしてローカルキャッシュクライアントによると、その後、サービス戦略のバランスを取る、独自の負荷を呼び出します。
- サーバーモード:他のサービスを呼び出す場合、直接レジストリに要求を開始し、政策のバランスを独自の負荷に応じて登録サービスのコールセンター、およびクライアントがサービス・ディスカバリ・ロジックを維持する必要はありません。
二つのモデルの間で2、サービス発見の比較:
- クライアントモード:ユーレカなど。
- サービスのリストのためには、そのサービスを呼び出すときには、ローカルキャッシュに最初の呼び出しのリンクを削減するだろう。しかし、各クライアントは、サービスの独自のリストを維持する必要があります。
- 高可用性、ローカルキャッシュがあるので、レジストリがダウンしているので、場合でも、ルームサービスの通常の使用には影響しません。
- オフラインクライアントの簡単な呼び出しがサーバー上で表示され失敗したとき。
- サーバーモード:飼育係として。
- 使い方は簡単、メンテナンスフリーのクライアントサービスの一覧。
- すべてのレジストリで完了した作業の同時ストアとリコールで、レジストリの負荷が高すぎるので、レジストリは、すべてのサービスの失敗した場合、可用性は利用できません、レジストリに依存します。
- サーバー上のクライアントのないオフライン知覚ません。
3、ユーレカの可用性:
ユーレカが分かれていることを私たちは皆知っている、サーバーとクライアントので、可用性の高いユーレカを構築する際に、高可用性を必要とどちらも。
、サーバー:
高可用性サーバは、実際にクライアントにすることですサービスのリストを取得するあまり失敗する可能性を私たちはちょうどする必要があるので、二つ以上のサーバーユーレカを起動し、それらがサービスの相互Aのリストをコピーしましょうことができます。
1はserver.port = 9091 2 eureka.client.service-url.defaultZone = HTTP:// localhostを:9092 /ユーレカ
1はserver.port = 9092 2 eureka.client.service-url.defaultZone = HTTP:// localhostを:9091 /ユーレカ
B、クライアント
クライアントの可用性をしているサービスのリストを取得するために失敗したとして、少しのように、我々は唯一の必要があるので、できる複数のレジストリを設定します。
1 eureka.client.service-url.defaultZone =のhttp:// localhostを:9091 /ユーレカ、のhttp:// localhostを:9092 /ユーレカ
4、ユーレカ原理:
- 30秒デフォルト、ユーレカクライアントが定期的にサービスユーレカサーバ構成のリストを引き出します。
- サービスオフラインユーレカ・サーバは、ユーレカサービスのリストを更新するために、クライアントが加入を通知しますし、また他のユーレカ・サーバに通知します。
- ユーレカクライアントは、デフォルトの30秒ユーレカサーバーにハートビートを送信し、ユーレカサーバは90秒でハートビートユーレカクライアントをオフラインで送信しないだろう、と通知ユーレカクライアントを、ユーレカサーバー。
ユーレカサーバーの保護メカニズム:原因ユーレカサーバはネットワークの問題であってもよいユーレカサーバがサービスをオフラインでブラインドしないように、他のサービスのハートビートを受信しません。
ユーレカサーバーの保護ルール:計算、それは保護メカニズムを入力する場合、サービスの85%がこの期間内にユーレカ・サーバは、通常、いくつかの時間を追跡し、登録を受け入れるだろうが、ユーレカにデータを通知しない、ハートビートを送信していない場合クライアントと他のユーレカ・サーバ、それは殺人ません。
SpringCloudリボン:
コールサービスは、負荷分散を達成することができるので、RestTemplateの残りの部分に基づいて新しいスタイルを再構築します。
1 @Bean 2 @LoadBalanced 3 公共残留テンプレート休止テンプレートを(){ 4 戻り 新しい残留テンプレート()。 5 }
設定プロパティ:
1 ##ローカル設定-個別に開発されたクライアント(eureka- プロバイダクライアント) 2ユーレカ-provider.ribbon.listOfServers =はlocalhost:8072は、localhost:8073
配置格式:<クライアント名> <名前空間> <プロパティ名> = <値>。
propertyNameの见com.netflix.client.config.CommonClientConfigKey
SpringCloud Hystrix:
Hystrixがオープンソースであるフォールトトレラント及び遅延ライブラリを配布し、目的は、することである分散サービスの障害を隔離します。また、エレガントな提供の劣化や吹き実装、サービスが速く失敗することを可能にし、障害からの迅速な復旧を。
1、Hystrixは、問題を解決します:
- スレッドやセマフォ単離することにより、達成分散サービスのリソースの制限をサービス問題は、他のサービスに影響を与えませんがある場合、。
- エレガントなダウングレード支えるデータに戻るには、ダウングレード後のメカニズム(残業、リソースの不足が格下げされます)、。
- 最適化されたヒューズ機構、故障率が閾値を自動的に格下げに達し、かつ迅速に回収することができます。
- 提供要求が合併して、要求のキャッシング。
図2に示すように、スレッド分離:Tomcatがより多くの要求、Tomcatに転送結果の実施後、内部スレッドに対応できるように、独自スレッド内で実行されるTomcatの要求タスク。
3、セマフォ分離:類似スレッドスペーサ、信号分離手順の量が制限内であることを除いて。
4、単離および信号分離スレッド差の量:
|
スレッドプール |
セマフォ |
スレッド |
そして、非スケジュールスレッドと同じスレッド |
そして、スケジューリングスレッドが同じスレッドです |
支出 |
キューイング、スケジューリング、および他のオーバーヘッドコンテキストの切り替え |
ラジオ切替処理、低コスト |
非同期な |
サポート |
サポートしていません。 |
同時サポート |
(スレッドプールのサイズによって決定される)サポート |
(セマフォのサイズによって決定される)サポート |
注:サービスが融合満たさなければならない時間を、要求の数、故障率 3つの条件が回路ブレーカをトリガします。
SpringCloud装います:
装うオープンソースの宣言型、テンプレートベースのHTTPクライアントである、それはより便利でエレガントな呼び出し元のHTTP APIをすることができ、かつSpringCloud装うはリボン、ユーレカをサポートするために、ネットフリックス装うの拡張機能です。
唯一のインターフェースを定義する必要が使用する場合、インターフェイスはスキャン注釈結合@EnableFeignClients(basePackages = {「com.xxx.xxxを」}) 、および呼び出しと同様の方法を呼び出しインターフェースとすることができます。
SpringCloud Zuul:
Zuulは、主のために、オープンソースNetflixのゲートウェイでルーティングおよびフィルタリング。
それのルールエンジンは、Javaの、グルーヴィーとして、任意のJVM言語の使用を可能にするので、それはまた、JVMのルータやロードバランサに基づいています。
1、Zuulの役割:
- ジャーナル
- ストレステスト
- ダイナミックルーティング
- 安全認証
- 等
2、Zuul要求ライフサイクル:
- 前:なログ、リクエストのチェックとして、要求を転送する前に、要求を処理します。
- ルート:特定のサービスプロバイダに転送要求。
- ポストは:いくつかの処理結果は、データ処理、コンテンツ変換、等(データ脱感作)として実行するサービスプロバイダに戻りました。
- エラー:エラーフィルタは、場合、要求に例外が発生する可能にしました。
3、カスタムフィルタZuul
1 パッケージcom.jdr.maven.sc.integration.zuul.filter。 2 3 インポートcom.netflix.zuul.ZuulFilter。 4 インポートcom.netflix.zuul.exception.ZuulException。 5 インポートorg.springframework.beans.factory.annotation.Value。 6 インポートorg.springframework.cloud.context.config.annotation.RefreshScope。 7 インポートorg.springframework.stereotype.Component。 8 9 インポート 静的org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE。 10 11 / ** 12 * @author zhoude 13 * @date 2019年10月20日9時44分 14 * / 15 @Component 16 @RefreshScope 17 パブリック クラス LogFilterが延びZuulFilterを{ 18 19 @value( "$ {zuul.log名}" ) 20 プライベート文字列logNameは。 21 22 / ** 23 *过滤器类型 24 * 25 * @return プリ、ルート、ポスト、ERR 26 * / 27 @Override 28 パブリック文字列のfilterType(){ 29 リターンPRE_TYPE。 30 } 31である 32 / ** 33 *、小さい最初の実装実行順序フィルタ 34が * 35 * @return 実行シーケンス 36 * / [37 @Override 38は 公衆 INT filterOrder(){ 39 リターン 0 ; 40 } 41が 42であります * / * 43 *べきフィルタ(この関数は動的制御を達成するために、論理スイッチの数を増加させることができる) 44である * 45 * @return 真フィルタリング、フィルタが実行されるべきではない行うべき偽 46である * / 47 @Override 48 公共 ブールshouldFilter(){ 49 リターン trueに; 50 } 51が 52である / ** 53である *フィルタの特定の実行ロジック 54である * 55 * @return ターゲット 56である * @throws 異常ZuulException発生時ZuulExceptionがスロー行わ 57である * / 58 @Override 59 公的オブジェクトRUN()はスロー{ZuulException 60 System.err.println(+ "これはログである" ; logNameは) 61が 戻り NULL ; 62である } 63れます }
SpringCloudバス:
SpringCloudバスは、分散アクチュエータであるシステムの状態が変化した場合、それはアプリケーション、ブロードキャスト(設定変更)との間の通信チャネルとして機能することができます。