マイクロサービスは、主要メーカーが追求する主流のテクノロジーアーキテクチャになりました。マイクロサービスの学習の見通しは非常に有望であり、SpringCloudは主流のマイクロサービステクノロジースタックになりました。この一連の記事では、SpringCloudテクノロジースタックに焦点を当て、マイクロサービスシナリオでのSpringCloudテクノロジースタックの実際のアプリケーションを包括的に分析して説明します。
Spring Cloud Gateway
ナレッジインデックス
- ゲートウェイの概要
- 入門
- ルーティングプレフィックス
- フィルター
1ゲートウェイの概要
Spring Cloud Gateway
これは、チームのまったく新しいプロジェクトであり、、、などのテクノロジーSpring Cloud
に基づくゲートウェイです。これは、マイクロサービスアーキテクチャにシンプルで効果的かつ統一されたリクエストルーティング管理方法を提供することを目的としています。Spring 5.0
SpringBoot2.0
Project Reactor
REST
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
アドレスで消費者サービスインターフェースにアクセスする
3ルーティングプレフィックス
3.1プレフィックスを追加する
マップされたパスにプレフィックスを追加するにはgateway
、でルートのフィルタを設定します。PrefixPath
これは、インターフェイスアドレスを非表示にする役割を果たし、インターフェイスアドレスの公開を回避できます。
パスプレフィックスフィルタを追加するように要求アドレスを設定します
spring:
gateway:
routes:
filters:
- PrefixPath=/consumer
テスト
ルーティングサービスアクセスを再開します
http://localhost:8502/hello-feign
結果は次のようになります。
http://localhost:8002/consumer/hello-feign
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
4つのフィルター
ゲートウェイとしてのフィルターの重要な機能の1つは、要求認証を実装することです。前路由前缀
の章の関数も、フィルターを使用して実装されています。
4.1一般的なフィルター
Gateway
数十の組み込みフィルターがあります。一般的な組み込みフィルターには次のものがあります。
フィルタ名 | 説明する |
---|---|
StripPrefix | 一致するリクエストパスからプレフィックスを削除します |
PrefixPath | 一致するリクエストパスのプレフィックス |
AddRequestHeader | 一致するリクエストにヘッダーを追加する |
AddRequestParameter | 一致するリクエストにパラメータを追加する |
AddResponseHeader | ゲートウェイから返された応答にヘッダーを追加します |
4.2一般的なシナリオ
- 認証を要求する:アクセス権がない場合は、直接傍受します
- 例外処理:例外ログを記録する
- サービスコール期間の統計
4.3フィルター構成手順
Gateway
2つのフィルターがあります
局部过滤器:只作用在当前配置的路由上,上面我们配置的路由前缀过滤器就是局部过滤器
全局过滤器:作用在所有路由上。
4.4グローバルフィルター構成のデモンストレーション
グローバル構成フィルターAddResponseHeader
spring:
cloud:
gateway:
# 配置全局默认过滤器
default-filters:
# 往响应过滤器中加入信息
- AddResponseHeader=key1,value1
テスト
応答ヘッダーはブラウザーに表示されます