技術共有

Grain Mall 実践ノート-27-分散コンポーネント-SpringCloud-ゲートウェイ-作成

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

このセクションの主な内容は、ゲートウェイ モジュールの作成、Nacos へのゲートウェイの登録、およびテスト用のルーティングの構成です。

1. ゲートウェイモジュールを作成する

プロジェクトを右クリックしますNew->Module、新しいモジュールを作成します、モジュール名 gulimall-gateway

ここに画像の説明を挿入します

さまざまな情報を入力します。

ここに画像の説明を挿入します

「ゲートウェイの依存関係」を選択します。

ここに画像の説明を挿入します
「作成」をクリックしてモジュールを作成します。

2. ゲートウェイサービスの設定

1. 共通モジュールに依存する

		<dependency>
            <groupId>com.atguigu.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

ゲートウェイ サービスは登録センターと構成センターも使用する必要があるため、共通モジュールに依存して取得される、関連するパッケージの依存関係が必要です。

2. サービス検出を開始する

スタートアップクラスにアノテーションを追加することで、サービス起動後に登録センターに登録できるようになります。

@EnableDiscoveryClient
  • 1

3. 設定ファイルの作成

リソース ディレクトリに 3 つの新しい構成ファイルを作成します。

① アプリケーション.プロパティ

Nacos 登録センター関連情報を設定します。

server.port=80
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.application.name=gulimall-gateway
  • 1
  • 2
  • 3

② bootstrap.properties

Nacos 構成センターの関連情報を構成します。ゲートウェイ モジュールのすべての構成ファイルは、事前に Nacos 上に作成されている必要があることに注意してください。

ここに画像の説明を挿入します

spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=405d2201-d62b-4203-80c8-800e9387ad40
  • 1
  • 2
  • 3

③ アプリケーション.yml

このファイルに、ゲートウェイのルーティング構成を記述します。詳細については、次のセクションを参照してください。

3. ゲートウェイルーティング設定

1. ルーティング構成

このパートでは、ゲートウェイの構成方法を実践するために、2 つの実際の要件を例として取り上げます。

ゲートウェイの役割は、ゲートウェイによって設定されたルールに従って、受信したリクエストを対応するサービスに転送することです。

デモンストレーションの便宜上、このような要求があると仮定して、次の URL をブラウザに入力すると、要求は Baidu に転送されます。

http://localhost/?url=baidu
  • 1

ブラウザに次の URL を入力すると、リクエストが Tencent に転送されます。

http://localhost/?url=qq
  • 1

設定ファイルの書き方は?

ウェアハウス Spring クラウド ゲートウェイ公式ドキュメント、その形式を参照してください。

URL のクエリ条件に基づいて対応する転送を実行する必要があるため、クエリに関するゲートウェイのアサーション構成ドキュメントを見つけます。

ここに画像の説明を挿入します

設定については、このドキュメントを参照してください。

アプリケーション.yml

spring:
  cloud:
    gateway:
      routes:
        - id: baidu_test
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: qq_test
          uri: https://www.qq.com
          predicates:
            - Query=url,qq
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

ここではクエリパラメータを使用するために 2 つのルーティングルールが定義されていますurlこの値により、リクエストの転送先となるターゲット URI が決まります。

  • spring.cloud.gateway.routes: Spring Cloud Gateway のルーティング設定リストです。

  • それぞれroutes項目はルーティング ルールを定義します。

  • id: 各ルーティング ルールには、ルートを識別および管理するための一意の ID が必要です。

  • uri : ルーティング ルールが一致すると、リクエストはこの URI アドレスに転送されます。ここhttps://www.baidu.comそしてhttps://www.qq.comBaidu と Tencent の Web サイトの URL がそれぞれ指定されています。

  • predicates : これは、このルーティング ルールを適用するかどうかを決定するために使用されるルーティング ルールのアサーション リストです。アサーションは、リクエストのメタデータに基づいて評価される式です。

    • Query=url,baidu: このアサーションは、リクエストにurlクエリパラメータであり、その値は以下に等しいbaidu、その後、このルーティング ルールがトリガーされ、リクエストが転送されます。https://www.baidu.com

    • Query=url,qq: 同様に、クエリパラメータの場合url値はqq、リクエストはに転送されますhttps://www.qq.com

このようにして、アプリケーションが次のようなメッセージを受信したときに、url=baiduまたはurl=qqクエリパラメータをリクエストすると、Spring Cloud Gateway は上記のルールに従って、対応する Web サイトにリクエストをプロキシします。

2. 検証

ブラウザで次のアドレスにアクセスしてください。

http://localhost/?url=baidu
  • 1

ここに画像の説明を挿入します

上記のインターフェイスがある場合、ゲートウェイ サービスの構成とルーティングの構成が正常であることを意味します。

エラーログ

Gateway の起動中にエラーが報告されます。

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2024-07-11 15:57:32.988 ERROR 27224 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

ここに画像の説明を挿入します

その理由は、Gateway モジュールが common に依存しており、common モジュールが mybatis への依存性を宣言しているためです。mybatis パッケージは起動時にデータベース関連の構成を探しますが、Gateway プロジェクトにはデータベースが必要ないため、関連する構成がありません。 。

解決策は、起動時にデータベース関連の構成を検索する必要がないこと、および起動クラスのアノテーションで宣言することで関連するパッケージの依存関係を除外できることをゲートウェイ モジュールに伝えることです。

ここに画像の説明を挿入します

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  • 1