Spring Cloud Gatewayの紹介
Spring Boot 2の公式バージョンは、少し前にリリースされました。 Spring Cloud GatewayはSpring Boot 2に基づいており、Spring Cloudのまったく新しいプロジェクトです。このプロジェクトは、スプリング5、スプリングブート2、プロジェクトリアクターなど、スプリングエコシステムに構築されたAPIゲートウェイを提供します。 Spring Cloud Gatewayは、APIを送信し、セキュリティ、監視/メトリック、回復力などの交差懸念を提供するためのシンプルで効率的な方法を提供するように設計されています。現在の最新バージョンはv2.0.0.m8で、公式バージョンも間もなくここにあります。
Spring Cloud Gatewayの機能:
VS Netflix Zuul
Zuulは、ブロッキングAPIを使用して、サーブレット2.5(3.xを使用)に基づいています。 WebSocketsなどの長い接続をサポートしていません。ゲートウェイは、スプリングフレームワーク5、プロジェクトリアクター、およびスプリングブート2に基づいて構築されており、非ブロッキングAPIを使用しています。 WebSocketsはサポートされており、Springと密接に統合されているため、より良い開発体験になります。
スプリングクラウドゲートウェイはじめに練習
著者は最近、Spring Cloud Gatewayのソースコードを調査し、ほとんどの機能についてソースコード分析に関する記事を書きましたが、公式バージョンは結局リリースされていません。この記事は、一般的に使用されているいくつかの機能を示す紹介慣行であり、最新の公式バージョンのリリースを楽しみにしています。
例は、Gateway-Serverとユーザーサーバーの2つのサービスを開始します。シミュレートされたシナリオは、クライアントがバックエンドサービスを要求し、ゲートウェイがバックエンドサービスへの統一された入り口を提供することです。すべてのバックエンドサービスはサービスに登録されており、領事を見つけました(ビルドZKとユーレカは両方とも大丈夫です。私は領事を使用することに慣れています)。ゲートウェイは、ロードバランシングを通じて特定のバックエンドサービスに前進します。
ユーザーサービス
ユーザーサービスはConsulに登録されており、インターフェイス/テストを提供します。
頼る
必要な依存関係は次のとおりです。
<Dependency> groupId> org.springframework.cloud </groupId> <artifactid> spring-cloud-starter-consul-discovery </artifactid> </dependency> <dependency> <deprency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-webbeb </artificid>
構成ファイル
スプリング:アプリケーション:名前:ユーザーサービスクラウド:相談:ホスト:192.168.1.204ポート:8500ディスカバリー:IP-ADDRESS:$ {host_address:localhost}ポート:$ {server_port:$ {server.port}} healthCheckPath: /Health HealthCheckEnterval: /Health HealthCheckinterval:15S Instance-NAME:ユーザー:ユーザー-Dame:ユーザー - 8005管理:セキュリティ:有効:falseインターフェイスを公開します
@springbootapplication@restcontroller@enabledisiscoveryclientpublic gatewayuserapplication {public static void main(string [] args){springapplication.run(gatewayuserapplication.class、args); } @getMapping( "/test")public string test(){return "ok"; }}インターフェイスを公開/テストし、OKを返します。
ゲートウェイサービス
Gateway Serviceは、さまざまなルーティング構成、ルーティングアサーション工場、フィルター工場を提供します。
頼る
紹介する必要がある依存関係:
<依存関係> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-actuator </artifactid> </dependency> // webfluxへの依存関係、<依存関係> <groupid> org.springframework.boot </course> <artifactid> spring-boot-starter-webflux </artifactid> </dependency> <dependency> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-cateway-core </artifactid> </dependency> //サービスの発見コンポーネント、排他的依存関係<依存関係<groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-consul-discovery </artifactid> <バージョン> 2.0.0.m6 </version> <exclusion> <groupid> org.springframework.boot < </exclusion> </exclusions> </dependency> // kotlin依存関係<依存関係> <groupid> org.jetbrains.kotlin </groupid> <artifactid> kotlin-stdlib </artifactid> <バージョン> $ {kotlin.version} </バージョン> <オプション> <GroupId> org.jetbrains.kotlin </groupid> <artifactid> kotlin-refltlefl </artifactid> <version> $ {kotlin.version} </version> <optional> true </optional> </Dependency>上記のように、Kotlin関連の依存関係が導入されており、Kotlinのルーティング構成をここでサポートする必要があります。 Spring Cloud Gatewayの使用には、Web関連の構成を除外する必要があります。 WebFluxへの参照を紹介します。アプリケーションが開始されると確認され、導入する必要があります。
ルーティングアサーションファクトリー
リクエスト時間、ホスト、パス、メソッドなどに応じて、ルーティングアサーション工場には多くの種類があります。次の定義は、パスベースのルートアサーションマッチングです。
@beanpublic routerfunction <serverResponse> testfunrouterfunction(){routerfunction <serverResponse> route = routerfunctions.route(requestpredicates.path( "/testfun")、request-> serverResponse.ok()。戻るルート;}要求されたパスが /testFunの場合、OKのステータスコードが直接返され、応答本体はHello Stringです。
フィルターファクトリー
ゲートウェイは、ルーティングリクエストをフィルタリングし、認証後にヘッダーを構築するなど、いくつかの操作を実行する必要があることがよくあります。リクエストヘッダーの追加、リクエストパラメーターの追加、応答ヘッダーの追加、回路ブレーカーなど、フィルタリングには多くの種類があります。
@BeanPublic Routelocator customRoutelocator(RouteLocatorBuilder Builder、ThrottleGateWayFilterFactory Throttle){//@Formatter:Off Return Builder.Routes().Route(R-> R.Path( "/image/webp").filter .uri( "http://httpbin.org:80")).build(); //@formatter:on}上記のように、要求パスが/image/webpの場合、要求はhttp://httpbin.org:80に転送され、応答がフィルタリングされ、応答ヘッダーx-anotherheader:bazが追加されます。
カスタムルーティング
上記の2つのサブセクションはAPIカスタムルーティングに属し、構成を介して定義することもできます。
スプリング:クラウド:ゲートウェイ:ロケーター:有効:真のデフォルトフィルター:-addResponseHeader = X-Response-Default-Foo、デフォルトバールート:# ============================================================================================== ============================================================================================== ============================================================================================== ====================================================================================================
上記の構成は、ルーティングとフィルターを定義します。グローバルフィルターは、ヘッダーx-response-default-foo:default-barにすべての応答を追加します。 ID default_path_to_httpのルートは定義されていますが、優先度は比較的低いです。リクエストが一致できない場合、BlueSkykong.comに転送されます。
Kotlinカスタムルーティング
Spring Cloud GatewayはKotlinを使用してルーティングをカスタマイズできます。
@ConfigurationClass AdstitionalRoutes {@Bean Fun AddatiorRoutelocator(Builder:RouteLocatorBuilder):RouteLocator = builder.Routes {route(id = "test-kotlin"){path( "/image/png")filters {approssponseheader( "x-testheader"、 "foobar") uri( "http://httpbin.org:80")}}}要求されたパスが/image/pngの場合、http://httpbin.org:80に転送され、フィルターが設定され、xテストヘッダー:Foobarヘッダーが応答ヘッダーに追加されます。
サービスディスカバリーコンポーネント
Discoveryコンポーネントのサービス登録と組み合わせて、ServiceIDを介して特定のサービスインスタンスに転送されます。対応する依存関係は、以前の構成で導入されています。
@BeanPublic RouteDefinitionLocator discoveryClientRoutedefinitionLocator(discoveryClient discoveryClient){return new discoveryClientRoutedefinitionLocator(discoveryClient);} DiscoveryClientRouteDefinitionLocatorのコンストラクターにDiscoveryClientを注入します。ソースコード分析については後で説明し、ここでは拡張されません。
スプリング:クラウド:ゲートウェイ:ロケーター:有効:真のデフォルトフィルター:-addResponseHeader = X-Response-Default-Foo、デフォルトバールート:# ========================================================================================================================================================================================================================================================================================= -Stripprefix = 1
上記の構成により、DiscoveryClientロケーターの実装が可能になります。ルートでは、 /ユーザーから始まるすべての要求がユーザーサービスに転送され、パスフィルターが適用されてパスのプレフィックスの最初の部分をインターセプトすることが定義されます。つまり、アクセス/ユーザー/テストへの実際の要求はlb:// user/テストに変換されます。
WebSocket
WebSocketのゲートウェイルーティングを構成することもできます。
スプリング:クラウド:ゲートウェイ:デフォルトフィルター: - addResponseheader = x-response-default-foo、default-barルート: - id:websocket_test uri:ws:// localhost:9000注文:9000順序: - path =/echo
WSサーバーWSCATを起動します - リステン9000、ゲートウェイ(ゲートウェイポートは9090)を開始し、クライアントをWSCATに接続します - ws:// localhost:9090/echoに接続します。
クライアントアクセス
読者は、ソースコードをダウンロードして、上記の機能を試すことができます。ここでは、ユーザーサービスにアクセスした結果のみを示します。
ゲートウェイは、ユーザーサーバーにバランスを整え、OKを返しました。応答ヘッダーには、グローバルフィルター設定ヘッダーX-Response-Default-Foo:デフォルトバーが含まれています
要約します
この記事では、Spring Cloud Gatewayに属する機能とコンポーネントのいくつかを調べます。この新しいAPIは、ゲートウェイとプロキシサポート用のすぐに使用できるツールを提供します。 Spring Cloud Gateway 2.0の公式バージョンを楽しみにしています。
ソースコードアドレス
https://github.com/keets2012/spring-cloud_samples
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。