7-ゲートウェイズールのスプリングクラウドロード

1 はじめに

2.ズールについて

2.1 ズールの基本原則

  • Gateway (Zuul) - 重要なコアはフィルターです (実際にはこの文で十分です)

    これらのフィルターは次の機能を実行します。

    • 認証とセキュリティ: 各リソースの認証要件を特定し、要件を満たさないリクエストを拒否します。
    • 監査と監視: エッジで意味のあるデータと統計を追跡し、生産状況を正確に把握します。
    • 動的ルーティング: リクエストを異なるバックエンド クラスターに動的にルーティングします。
    • ストレス テスト: パフォーマンスを理解するために、実行クラスターへのトラフィックを徐々に増やします。
    • 負荷分散: 各負荷タイプに対応する容量を割り当て、制限を超えるリクエストを破棄します。
    • 静的応答の処理: 部分応答は、内部クラスターへの転送を回避するために、エッジ ロケーションで直接構築されます。
    • マルチリージョンの弾力性: AWS リージョン間のリクエストルーティング。ELB (Elastic Load Balancing) の使用を多様化し、システムのエッジをシステムのユーザーに近づけることを目的としています。
    • リクエスト ルーティング機能を実装した後、クライアントは統合 API ゲートウェイの入り口を介して、マイクロサービス アプリケーションによって提供されるインターフェイスにアクセスできるようになります。ただし、各クライアント ユーザーがサーバー アプリケーションに提供されているインターフェイスを要求する場合、そのアクセス権には特定の制限があることが多く、システムはすべてのマイクロサービス インターフェイスをユーザーに公開しません。
    • サービスのルーティングが完了した後も、クライアントがアクセスすべきリソースのみにアクセスしないように、サービスを外部に公開するためのセキュリティ対策が必要です。したがって、Zuul のフィルターを使用して外部サービスのセキュリティ制御を実装する必要があります。
  • サービス ゲートウェイでフィルターを定義するには、ZuulFilter 抽象クラスを継承し、リクエストをインターセプトしてフィルター処理するために定義されている 4 つの抽象関数を実装するだけです。

  • 詳細については、次の記事を参照してください:
    マイクロサービス: ゲートウェイ (zuul) - 基本原則、構成、認証、IP 制限、および電流制限

2.2 ズールを使用する理由

3. ズールを構築する

3.1 プロジェクトの構造

  • 次のように:
    ここに画像の説明を挿入します

3.2 基本構成

3.2.1 pom ファイル

  • 次のように:
    ここに画像の説明を挿入します

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.liu.susu</groupId>
            <artifactId>dog-cloud-parent</artifactId>
            <version>1.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>dog-gateway-zuul-8090</artifactId>
        <packaging>jar</packaging>
    
        <name>dog-gateway-zuul-8090</name>
        <url>http://maven.apache.org</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>com.liu.susu</groupId>
                <artifactId>dog-api</artifactId>
                <version>${project.version}</version>
            </dependency>
    
            <!--zuul相关的-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    
            <!--actuator监控-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <!--容错hystrix-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix</artifactId>
            </dependency>
            <!--下面这几个,版本同${spring-boot.version}-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
        </dependencies>
    </project>
    
    

3.2.2 ymlファイル

  • 次のように:
    ここに画像の説明を挿入します

    server:
      port: 8090  # #网关的端口号
    
    spring:
      application:
        name: dog-gateway-zuul # #网关在注册中心的唯一名称
    
    eureka:
      client:  # 客户端注册进eureka服务列表内
        register-with-eureka: true  # false表示不向注册中心注册自己
        service-url:
          defaultZone: http://62.234.14.112:2886/eureka/,http://58.87.88.142:2886/eureka,http://154.8.150.175:2886/eureka/
      instance:
        instance-id: dog-gateway-zuul-8090
    #    prefer-ip-address: true
    
    

3.3.3 スタートアップクラス

  • 次のように:

    @SpringBootApplication
    @EnableEurekaClient
    @EnableZuulProxy  
    

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

3.3 効果を確認するためのテスト

3.3.1 デモンストレーション

  • まず、Eureka クラスターとサービス プロバイダーを起動し、次に zuul を起動します。Eureka クラスターとサービス プロバイダーはサーバー上で停止していないため、次のようにローカルの zuul を直接起動します。
    ここに画像の説明を挿入します
  • 次に、次のように、サービス プロバイダーに直接アクセスできることを確認します。
    ここに画像の説明を挿入します
  • 次に、zuul経由でアクセスします。Zuulには負荷分散機能も搭載されています、次のように:
    // http://zuul_host:zuul_port/微服务在Eureka 注册中心上的服务提供者(对应的application.name)/接口映射地址
    // 本地的话,如下3种访问均可
    
    http://localhost:8090/dog-provider/dog/getDogByNum/1
    http://127.0.0.1:8090/dog-provider/dog/getDogByNum/1
    http://192.168.1.101:8090/dog-provider/dog/getDogByNum/1
    
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

3.3.1 アーキテクチャ図

  • 以下のような単純なアーキテクチャ

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

4.zuulルーティングアクセスマッピングルール

4.1 サービスプロバイダーのサービス名のマッピング

  • 構成は次のとおりです。
    ここに画像の説明を挿入します

    zuul:
      routes:
        zuulDog.serviceId: dog-provider   # dog-provider 是服务提供者的服务名
        zuulDog.path: /myDog/**
      #  ignored-services: dog-provider  #禁止通过此服务名访问,即 http://localhost:8090/dog-provider/dog/getDogByNum/1 不再可访问
      ignored-services: "*"   # 忽略多个微服务的情况
    
  • アクセス効果は以下の通りです。

    // http://localhost:8090/dog-provider/dog/getDogByNum/1   没映射前的访问,暴漏了服务提供者名
    http://localhost:8090/myDog/dog/getDogByNum/1   //myDog 随便映射
    

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

4.2 アクセスプレフィックス

  • 次のように:
zuul:
  routes:
    zuulDog.serviceId: dog-provider   # dog-provider 是服务提供者的服务名
    zuulDog.path: /myDog/**
#  ignored-services: dog-provider  #禁止通过此服务名访问,即 http://localhost:8090/dog-provider/dog/getDogByNum/1 不再可访问
  ignored-services: "*"   # 忽略多个微服务的情况
  prefix: /susu  # 加前缀

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

5.

おすすめ

転載: blog.csdn.net/suixinfeixiangfei/article/details/131768504