知っておく必要のあるマイクロサービスのゲートウェイゲートウェイ

マイクロサービスは、主要メーカーが追求する主流のテクノロジーアーキテクチャになりました。マイクロサービスの学習の見通しは非常に有望であり、SpringCloudは主流のマイクロサービステクノロジースタックになりました。この一連の記事では、SpringCloudテクノロジースタックに焦点を当て、マイクロサービスシナリオでのSpringCloudテクノロジースタックの実際のアプリケーションを包括的に分析して説明します。

Spring Cloud Gateway

ナレッジインデックス

  • ゲートウェイの概要
  • 入門
  • ルーティングプレフィックス
  • フィルター

1ゲートウェイの概要

Spring Cloud Gatewayこれは、チームのまったく新しいプロジェクトであり、、、などのテクノロジーSpring Cloudに基づくゲートウェイですこれは、マイクロサービスアーキテクチャにシンプルで効果的かつ統一されたリクエストルーティング管理方法を提供することを目的としています。Spring 5.0SpringBoot2.0Project ReactorREST

Spring Cloud GatewayエコシステムのゲートウェイとしてSpringCloudの目標は、を置き換えることNetflix Zuulです。Gateway統一されたルーティング方式を提供するだけでなくFilter、チェーン方式に基づくゲートウェイの基本機能も提供します。例:セキュリティ、監視/メトリクス、およびスロットリング。

2はじめに

プロジェクトにサブモジュールspring_cloud_demos作成するgateway_demo

2.1依存関係の紹介

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR12</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.2スタートアップクラス

/**
 * Copyright (c) 2022 itmentu.com, All rights reserved.
 *
 * @Author: yang
 */
@SpringBootApplication
public class GateWayDemoApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(GateWayDemoApplication.class, args);
    }
}

2.3構成

server:
  port: 8502
spring:
  application:
    name: gateway
  cloud:
    consul:
      host: 192.168.184.128
      port: 8500
      discovery:
        service-name: ${
    
    spring.application.name}
        register: false

2.4ルーティング構成

gateway:
  # 路由si(集合)
  routes:
    # id唯一标识
    - id: consumer-service-route
      # 路由服务地址 
      uri: lb://service-consumer
      # 断言
      predicates:
        - Path=/**

コードの説明:

1:routes:id表示路由标识,唯一即可,当前案例中表示消费者服务对应的路由
2:uri: lb://service-consumer表示uri使用负载均衡模式,lb表示loadbalance,”lb:“后跟注册中心对应的服务名

2.5元のサービス-消費者サービスを変革する

アノテーション登録を追加@EnableDiscoveryClientして登録センターを開きます

/**
 * Copyright (c) 2022 itmentu.com, All rights reserved.
 *
 * @Author: yang
 */
@SpringBootApplication
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
public class ServiceConsumerApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(ServiceConsumerApplication.class, args);
    }

    @Bean
    @LoadBalanced//开启负载均衡
    public RestTemplate restTemplate(){
    
    
        return new RestTemplate();
    }
}

レジストリに登録するように構成を変更します

spring:
  cloud:
    consul:
      discovery:
        register: true

2.6テスト

http://localhost:8502/consumer/hello-feignアドレスで消費者サービスインターフェースにアクセスする

画像-20220320180509185

3ルーティングプレフィックス

3.1プレフィックスを追加する

マップされたパスにプレフィックスを追加するにはgateway、でルートのフィルタを設定します。PrefixPathこれは、インターフェイスアドレスを非表示にする役割を果たし、インターフェイスアドレスの公開を回避できます。

パスプレフィックスフィルタを追加するように要求アドレスを設定します

spring:
    gateway:
      routes:
          filters:
            - PrefixPath=/consumer

テスト

ルーティングサービスアクセスを再開します

http://localhost:8502/hello-feign

結果は次のようになります。

http://localhost:8002/consumer/hello-feign

画像-20220320181817680

3.2プレフィックスを削除する

gatewayでルートフィルタを設定することによりStripPrefix、マップされたパスのアドレスを削除できます。パスStripPrefix=1を使用して、ルートから削除するプレフィックスの数を指定します。例:パス/api/consumer/hello-feignはにルーティングされます/consumer/hello-feign

パスプレフィックスフィルタの削除を設定する

spring:
    gateway:
      routes:
          filters:
            - StripPrefix=1

テスト

ルーティングサービスアクセスを再開します

http://localhost:8502/api/consumer/hello-feign

結果は次のようになり、にルーティングされていることを示しています。

/consumer/hello-feign

画像-20220320182253539

4つのフィルター

ゲートウェイとしてのフィルターの重要な機能の1つは、要求認証を実装することです。路由前缀の章の関数も、フィルターを使用して実装されています。

4.1一般的なフィルター

Gateway数十の組み込みフィルターがあります。一般的な組み込みフィルターには次のものがあります。

フィルタ名 説明する
StripPrefix 一致するリクエストパスからプレフィックスを削除します
PrefixPath 一致するリクエストパスのプレフィックス
AddRequestHeader 一致するリクエストにヘッダーを追加する
AddRequestParameter 一致するリクエストにパラメータを追加する
AddResponseHeader ゲートウェイから返された応答にヘッダーを追加します

4.2一般的なシナリオ

  • 認証を要求する:アクセス権がない場合は、直接傍受します
  • 例外処理:例外ログを記録する
  • サービスコール期間の統計

4.3フィルター構成手順

Gateway2つのフィルターがあります

局部过滤器:只作用在当前配置的路由上,上面我们配置的路由前缀过滤器就是局部过滤器
全局过滤器:作用在所有路由上。

4.4グローバルフィルター構成のデモンストレーション

グローバル構成フィルターAddResponseHeader

spring:
  cloud:
    gateway:
     # 配置全局默认过滤器
      default-filters:
      # 往响应过滤器中加入信息
        - AddResponseHeader=key1,value1

テスト

応答ヘッダーはブラウザーに表示されます

画像-20220320183325636

おすすめ

転載: blog.csdn.net/scmagic/article/details/123942945