注: spring-webmvc の依存関係と競合するため、spring-webmvc を除外する必要があります。
2. yml設定ファイルを書く
サーバー.ポート = 8088 は ゲートウェイアクセスポート
spring.application.name は 現在のゲートウェイサービスのサービス名
ルーティング ルールは、gateway.routes の下で定義されます。
id はこのルーティング ルールの名前です。gateway.routes の下には多数のルーティング ルールが存在する可能性があります。
URL: 現在のゲートウェイのサービスにアクセスし、 どの URL に転送しますか?, まず、すべてのリクエストをゲートウェイに転送することはできません。述語アサーションがこの役割を果たす必要があります。
述語:いつ リクエストは現在のゲートウェイに到達します(それで このリクエストには、現在のゲートウェイの IP + ポート番号が含まれている必要があります。 情報の後にスラッシュ / が続くため、ゲートウェイはデフォルトでこの情報が利用可能であることを示すことができます。この情報は述語で考慮する必要はありません),
ポート番号以降のURLが/order-serv/**で始まる場合、それで 上記の URL の IP + ポートに転送するだけです 。 そしてスラッシュ/後続のパスはすべて削除されません、その後、アドレス http://localhost:8020/order-serv/order/add に転送されます。
(order-serv は、注文サービスが /order/add で始まるアドレスを持ち、在庫サービスも /order/add で始まるアドレスを持つことを防ぐためのサービス名です。 ゲートウェイに送信されるリクエストには、転送されるサービスの名前が含まれます。)、しかし 注文サービスが受信したリクエストには /order-serv/ がありません。, 送信されたリクエストのみ http://localhost:8020/order/add なので受信できます。 ゲートウェイに最初のレイヤーのパスを削除させます、フィルターを通じてプレフィックスをフィルターします
アサーションが満たされない場合は、404 エラーが報告されます。
ここでは、転送される URL アドレスを構成にハードコーディングしています。サーバーが移行されると、IP アドレスが変更されたり、サーバーがクラスターにデプロイされたりするため、nginx を介して負荷分散を実行する必要があります。 。
ゲートウェイとnacosを統合することで、これらの問題を簡単に解決できます
ナコスを統合する
1. nacos 依存関係の導入を続ける
(1) nacos を統合するには、現在のゲートウェイ サービスを nacos に登録し、nacos サービス アドレスとアカウント パスワードを書き込むだけです。
(2) ルーティングルールで転送するサービスのアドレスをサービス名「order-service」(url:order-service)に変更します。また、nacos付属のリボンの負荷分散戦略を使用する必要があるため、したがって、前に lb:// を追加します。lb は、loadbalance ロードバランシングを意味します。
ゲートウェイゲートウェイは、「order-service」全体をいずれかの注文サービスの IP アドレスに置き換えます (ゲートウェイは nacos に登録されているさまざまなサービスの IP アドレス リストを定期的に取得するため)。
これにより、サーバーが移行される場合、IP アドレスが変更される場合、またはサーバーがクラスターに展開される場合に、リバース プロキシとロード バランシングに nginx を使用する必要があるという問題が解決されます。
省略されたルーティング ルール: 合意は設定よりも重要です
(1) nacosサービスの自動識別機能をONにすると、アサーションルールを記述する必要がなくなりました。
(2) ゲートウェイに送信されたリクエストが nacos に登録されているサービス名で始まる場合、そのサービスのサーバーに自動的に転送され、第 1 層のパスは自動的に除外されます (デメリット: ルーティング ルールが柔軟ではありません)十分)
このとき、ゲートウェイアドレス/マイクロサービス/インターフェースの形式に従ってアクセスすれば成功応答を得ることができます。
アサーションファクトリー
URL に基づいてアサーションを行うことは、ゲートウェイの組み込みアサーション ファクトリです。

カスタム ルーティング アサーション ファクトリ
ここでは、クエリ リクエスト パラメーターに基づいてアサーション ファクトリをカスタマイズし、ソース コードの内容をコピーして、必要に応じて変更することを前提としています。
カスタマイズ
クエリリクエストパラメータに基づくアサーションファクトリー、
AbstractRoutePredicateFactory クラスを継承し、apply メソッドのロジックを書き直す必要があります。 apply メソッドでは、exchange.getRequest() を通じて ServerHttpRequest オブジェクトを取得することで、リクエスト パラメーター、リクエスト メソッド、リクエスト ヘッダーなどの情報を取得できます。
1. Spring コンポーネント、つまり Bean である必要があります。
2. クラスを追加する必要があります
ルート述語ファクトリ
終わりとして
3. 継承する必要がある
抽象ルート述語ファクトリ
4. 静的内部クラスを宣言し、構成ファイルで対応するアサーション情報を受け取る属性を宣言する必要があります。
5. 組み合わせる必要がある
ショートカットフィールド順序
練る
6. apply を使用して、true が一致に成功したか、false が一致に失敗したかを論理的に判断します。
フィルター (最初にフィルターしてからルーティング)
(1) まずリクエストされた URL アドレスをフィルターで処理するか、リクエスト ヘッダーや Cookie などの一部の情報を追加、削除、変更します。
(2) 次に、nacos サービス リストを通じて対応するサーバーにルーティングします。
フィルターの役割: リクエストがゲートウェイに到着すると、ビジネス ロジックでリクエストを処理できます。
例えば:
(1)フィルターを正面に通しますパスの最初の層を削除します
(2) ゲートウェイに送信されるすべてのリクエストにリクエスト ヘッダーを追加し、その中にコンテンツを設定できます。
(3) ゲートウェイなどに来るすべてのリクエストにCookieを設定できます。
内蔵フィルターの詳細については、公式ウェブサイトをご覧ください。
ゲートウェイフィルタファクトリー
いくつかのコード例を次に示します。
テストアドレスがゲートウェイゲートウェイに送信されます
ルートを介して次の @GetMapping アドレスにルーティングし、次のコードを使用してリクエストを受信して応答します。
例1:
例 2
例 3
以前の URL アドレスはゲートウェイに送信され、フィルタリングされ、プレフィックス /mall-order が付けられます。このとき、サーバーが応答を受信できるようにするには、送信されるすべてのリクエストに /mall-order が含まれるように設定する必要があります。このようにして、サーバーは通常、ゲートウェイによってルーティングされたリクエストを受信できます。
例 4
現在のゲートウェイに送信されたリクエストは、Baidu Web サイトにルーティングされます。
302 はリダイレクト後の応答ステータス コードです。
カスタムフィルター

グローバルフィルター
ローカル フィルターとグローバル フィルターの違いは次のとおりです。
部分的: 部分的は特定のルート用であり、ルート内で設定する必要があります。
グローバル: すべてのルーティング リクエストに対して、設定ファイルで設定されている、 定義したら、それが使用されます
組み込みのグローバル フィルター:
ルーティング アドレスに lb が含まれている場合、上記の最初のグローバル フィルターに対応する負荷分散ポリシーが自動的に採用されます。
これらのグローバルフィルターは、当社の管理を介さずに自動的に判断され、自動的に処理されます。
カスタム グローバル フィルター (重要なポイント)
すべてのアクセス要求を記録し、ログ形式で保存できます。カスタム グローバル フィルターを使用できます。
または、グローバル フィルターをカスタマイズして、ユーザーのログインと権限を決定することもできます。
グローバルフィルターのカスタマイズは非常に簡単です
1. クラスを定義し、管理のために springIOC コンテナに任せます。つまり、spring アノテーションを追加します。 @コンポーネント
2.
GlobalFilterインターフェイスを継承する、内部のフィルター メソッドを書き換えるには、内部にメソッド本体を記述するだけです。
3.
パラメータ交換で 含まれています このゲートウェイを入力してください要求されたすべての情報、URL アドレス、ヘッダー、Cookie、パス パラメーター、その他の情報を取り出して、対応する処理を実行します。 事務処理
4. chain.filter(exchange) を返す リクエストを解放する
リクエストのロギング
ゲートウェイ マイクロサービスで、ここにこのコマンドを追加してログを有効にし、ゲートウェイを通過するすべてのリクエストを記録します。ただし、出力されるのはコンソールのみです。

ゲートウェイのクロスドメイン構成
クロスドメイン: http リクエストが同じ IP + 同じポート上にない場合、それはクロスドメインと呼ばれます。
(同じIP + 同じポートのみを同じドメインと呼び、両方が同じドメイン内にあるとみなします)
1. yml を介して設定する 、ゲートウェイの次のレベルで構成されます

設定内容はクロスドメインで自分で変更可能
2. 構成クラスを通じて設定する
センチネルとゲートウェイ ゲートウェイの組み合わせ
Sentinel と組み合わせて、ゲートウェイに送信されたリクエストに対してフロー制御のダウングレードを実行します。
センチネルは 2 つの部分に分かれています
前提条件: Sentinel クライアントをリモート サーバーからダウンロードし、インストールして実行します。
ゲートウェイ サービスには以下のみが必要です。
ゲートウェイ サービスの構成ファイルと IP + ポート、センチネル クライアントのアカウント パスワード
このようにして、Sentinel のフロー制御のダウングレードが統合されます。
センチネルにはゲートウェイ サービスに関する特別なルールがあります、そのインターフェイスは、コントローラー内のメソッド (サービス入口) のフロー制御ダウングレード インターフェイスとは異なります。
アサーション ファクトリのこれらのルールに基づいて、現在のフローを制限できます。
フローは、特定の IP、リモート ドメイン名、リクエスト ヘッダー、URL 内のパラメーター、Cookie 値に基づいて制限できます。
ゲートウェイと組み合わせたセンチネルの応答内容をカスタマイズする
存在するゲートウェイ層がダウングレードされるか、センチネル フロー制御によってブローされると、ゲートウェイ層は次の内容でリクエスターに応答します。,

このようなコンテンツが望ましくない場合は、例外への応答方法をカスタマイズする必要があります。2つの方法があります
方法 1:(簡単)
yml設定では上記の内容をレイヤーに記述し、
春
.
雲
.
歩哨
.
SCGC 日本語
.
後退する
.
応答
‐
体
=
'{"コード":403,"mes":"
電流制限
"}'
応答本文の後のコンテンツは、カスタマイズされた応答コンテンツ (json 形式) です。
、書かれた内容が返信の内容となります。
方法 2:

レスポンスステータスコード、レスポンスタイプ(json形式)、レスポンス内容(「Downgraded!」)を設定します。
ゲートウェイの高可用性
