述語の紹介
春クラウドゲートウェイは春WebFluxのようルートになる HandlerMapping
インフラストラクチャは一部を一致させます。Spring Cloud Gatewayには、多くの組み込みルーティングアサートファクトリが含まれています。これらすべてのアサーションは、HTTPリクエストのさまざまな属性と一致します。あなたは、複数のルートアサーションとロジック植えることができますand
ステートメントを組み合わせて使用します。
公式ウェブサイト:https : //cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.2.RELEASE/reference/html/#gateway-request-predicates-factories
一般的に使用される述語:
一般的に使用される述語
デモプロジェクト構築リファレンス:[SpringCloud]ゲートウェイルーティング構成(17)、curlコマンドを使用したデモリクエスト
1、ルート述語の後
After断言
一つのパラメータ、datetime
(ジャワです ZonedDateTime
)。アサーションは、指定された日時の後に発生したリクエストと一致します。次の例では、ルーティング後にアサートを構成します。
例1. application.yml
1 スプリング: 2 クラウド: 3 ゲートウェイ: 4 ルート: 5 - id:after_route 6 uri:http:// localhost:8001 7 述語: 8 -After = 2020-04-20T23:57:57.308 + 08:00 [アジア/上海]
このルートは、2020年4月20日の23:57タイムゾーン時間(上海)以降のすべての要求に準拠しています。
テストリクエストコマンド:curl http:// localhost:9527 / payment / get / 1
2、ルート述語の前
Before断言
一つのパラメータ、datetime
(ジャワです ZonedDateTime
)。このアサーションは、指定されたの前に発生したリクエストと一致しますdatetime
。次の例では、プレルーティングアサーションを構成します。
例2. application.yml
1 スプリング: 2 クラウド: 3 ゲートウェイ: 4 ルート: 5 - id:before_route 6 uri:http:// localhost:8001 7 述語: 8 -Before = 2020-04-21T23:57:57.308 + 08:00 [Asia /上海]
このルートは、2020年4月21日の23:57タイムゾーン(上海)より前の要求に準拠しています。
3、ルート述語間
Between断言
2つの引数は、datetime1
とdatetime2
これは、Javaで ZonedDateTime
オブジェクト。このアサーションはdatetime1
、前後に発生したリクエストと一致しますdatetime2
。このdatetime2
パラメーターはpostでなければなりませんdatetime1
。次の例では、ルート間のアサーションを構成します。
例3. application.yml
1 スプリング: 2 クラウド: 3 ゲートウェイ: 4 ルート: 5 - id:between_route 6 uri:http:// localhost:8001 7 述語: 8 -Between = 2020-04-20T23:57:57.308 + 08:00 [アジア/上海]、2020-04-21T23:57:57.308 + 08:00 [アジア/上海]
4、Cookieルート述語
Cookie断言
二つのパラメータ、クッキーの使用 name
とregexp
(Javaの正規表現です)。アサーションは、指定された名前のCookieと一致し、その値は正規表現と一致します。次の例では、Cookieルーティングアサーションを構成します。
例4. application.yml
1 スプリング: 2 クラウド: 3 ゲートウェイ: 4 ルート: 5 - id:cookie_route 6 uri:http:// localhost:8001 7 述語: 8 -Cookie = username、xiaoming
このルートは、のために一致する名前があるユーザー名をし、正規表現のマッチングを暁明クッキーを要求します。
テストリクエストコマンド:curl http:// localhost:9527 / payment / get / 1 --cookie "username = xiaoming"
5、ヘッダールート述語
説明Header断言
は、ヘッダーname
と1つ(Java正規表現)の2つのパラメーターを取りますregexp
。アサーションは、指定された名前のヘッダーと一致し、その値は正規表現に一致します。次の例では、ヘッダールーティングアサーションを構成します。
例5. application.yml
1 春:
2 クラウド:
3 ゲートウェイ:
4つの ルート: 5- id:header_route 6 uri:http:// localhost:8001 7 predicates:8- Header = X-Request-Id、\ d +
要求がで指定されている場合X-Request-Id
の値は\d+
正規表現マッチングヘッダ(即ち、一つ以上の桁の値)は、ルート一致。
テストリクエストコマンド:curl http:// localhost:9527 / payment / get / 1 -H "X-Request-Id:123"
6、ホストルート述語
これは、Host断言
ホスト名のリスト:つのパラメータを取りますpatterns
。このパターンは、.
セパレータ付きのAntスタイルのパターンです。アサーションとHost
パターンマッチングのマッチングヘッダ。次の例では、ホストルートアサーションを構成します。
例6. application.yml
1春: 2クラウド: 3ゲートウェイ: 4つのルート: 5-id:host_route 6 URI:http:// localhost:8001 7つの述語: 8-Host = **。x.com
リクエストHost
にルートマッチングのヘッダー値が含まれている場合 **。X.com
テストリクエストコマンド:curl http:// localhost:9527 / payment / get / 1 -H "Host:demo1.x.com"
7、メソッドルート述語
Method断言
必要なmethods
HTTP一致させる方法のパラメータは、これは、1つの以上のパラメータです。次の構成メソッドの例では、アサーションをルーティングします。
1春: 2クラウド: 3ゲートウェイ: 4つのルート: 5-id:method_route 6 URI:http:// localhost:8001 7つの述語: 8-メソッド= GET
テストリクエストコマンド:curl http:// localhost:9527 / payment / get / 1 -X GET
8、パスルート述語
Path断言
二つのパラメータ:春のリストPathMatcher
patterns
と、オプションのコールサインmatchOptionalTrailingSeparator
。次の例では、パスルーティングアサーションを構成します。
1春: 2クラウド: 3ゲートウェイ: 4つのルート: 5-id:path_route 6 URI:http:// localhost:8001 7つの述語: 8-Path = / payment / get / **
テストリクエストコマンド:curl http:// localhost:9527 / payment / get / 1
9、ルート述語のクエリ
説明されているのは、Query断言
必須param
とオプションの2つのパラメーターを取りますregexp
(Java正規表現です)。次の例では、クエリルーティングアサーションを構成します。
例9. application.yml
1春: 2クラウド: 3ゲートウェイ: 4つのルート: 5-id:query_route 6 URI:http:// localhost:8001 7つの述語: 8-クエリ=緑
リクエストにクエリパラメータが含まれている場合、前述のルートはと一致します。green
テストリクエストコマンド:curl http:// localhost:9527 / payment / get / 1?Green = 1
10、RemoteAddrルート述語
RemoteAddr
必要なアサーションリストsources
例えば文字列CIDR表記(IPv4またはIPv6)であり、192.168.0.1/16
(192.168.0.1
IPアドレスであり16
、サブネットマスク)。次の例では、RemoteAddrルーティング述語を構成します。
1春: 2クラウド: 3ゲートウェイ: 4つのルート: 5-id:query_route 6 URI:http:// localhost:8001 7つの述語: 8-RemoteAddr = 192.168.1.1 / 24
リクエストテストコマンド:curl http://192.168.1.4:9527/payment/get/1
11、加重ルート述語
これは、Weight断言
2つのパラメータを持っているgroup
とweight
(int)を。重みはグループで計算されます。次の例では、ウェイトルーティングアサーションを構成します。
例11. application.yml
1 スプリング: 2 ゲートウェイ: 3 ディスカバリー: 4 ルート: 5 - id:weight_high 6 uri:http:// localhost:8001 7 述語: 8 -Weight = group1、8 9 - id:weight_low 10 uri:http:// localhost :8002 11 述語: 12- ウェイト=グループ1、2
このルートは、トラフィックの約80%を http:// localhost:8001に転送し、トラフィックの約20%をhttp:// localhost:8001に転送します
リクエストテストコマンド:curl http:// localhost:9527 / payment / get / 1