記事を共有する前に、「春のクラウドゲートウェイのネイティブインターフェースは、再生する方法を制限する」、コアは、春クラウドゲートウェイに依存して達成するために、デフォルトの電流制限フィルタを提供
ネイティブRequestRateLimiterの欠如
- コンフィギュレーション
spring:
cloud:
gateway:
routes:
- id: requestratelimiter_route
uri: lb://pigx-upms
order: 10000
predicates:
- Path=/admin/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 1
redis-rate-limiter.burstCapacity: 3
key-resolver: "#{@remoteAddrKeyResolver}" #SPEL表达式去的对应的bean
- StripPrefix=1
复制代码
- RequestRateLimiterGatewayFilterFactory
public GatewayFilter apply(Config config) {
KeyResolver resolver = getOrDefault(config.keyResolver, defaultKeyResolver);
RateLimiter<Object> limiter = getOrDefault(config.rateLimiter,
defaultRateLimiter);
boolean denyEmpty = getOrDefault(config.denyEmptyKey, this.denyEmptyKey);
HttpStatusHolder emptyKeyStatus = HttpStatusHolder
.parse(getOrDefault(config.emptyKeyStatus, this.emptyKeyStatusCode));
return (exchange, chain) -> {
return exchange.getResponse().setComplete();
});
});
};
}
复制代码
-
実際の製造工程では、我々は我々のニーズを満たしていません。
ルーティング情報は、本番データベースの永続性または配布センタに格納され、
RequestRateLimiterGatewayFilterFactory
交通流に応じて動的パラメータを制限データの変更などの永続的な変化は、それが閾値を変更するためにリアルタイムで行うことができないではありません
センチネル春クラウドゲートウェイのフロー制御をサポート
何センチネルこと?
人気のマイクロサービス、サービス、およびサービス間の安定性でますます重要になってきています。センチネルは、出発点として、フロー制御、ヒューズダウングレード、サービスの安定性を保護するためのシステム負荷保護の寸法、分散システムフロー防御兵を流します。
ルートの寸法:Spring構成ファイルで構成されたルーティングエントリ、カスタムルートIDと呼ばれ、対応するリソースのバージョン1.6.0を開始してから、センチネルは春クラウドゲートウェイアダプタモジュールを提供しています、2つのリソースは、電流制限寸法を提供することができますAPIの寸法:ユーザーはいくつかのパケットを定義するためにAPIから提供されたセンチネルAPIを使用することができます
ポンポン依存
<!--Spring Cloud Alibaba 封装的 sentinel 模块-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
<!--使用nacos 保存限流规则-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
复制代码
そして、ローカルルーティングルールデータソースセンチネルを設定
spring:
application:
name: sentinel-spring-cloud-gateway
cloud:
gateway:
enabled: true
discovery:
locator:
lower-case-service-id: true
routes:
- id: pigx_route
uri: https://api.readhub.cn
predicates:
- Path=/topic/**
sentinel:
datasource.ds1.nacos:
server-addr: 127.0.0.1:8848
data-id: gw-flow
group-id: DEFAULT_GROUP
ruleType: gw-api-group
filter:
enabled: true
复制代码
制限ポリシーにナコスデータソースの設定
- ポリシーを制限する共通の定数
以客户端IP作为限流因子
public static final int PARAM_PARSE_STRATEGY_CLIENT_IP = 0;
以客户端HOST作为限流因子
public static final int PARAM_PARSE_STRATEGY_HOST = 1;
以客户端HEADER参数作为限流因子
public static final int PARAM_PARSE_STRATEGY_HEADER = 2;
以客户端请求参数作为限流因子
public static final int PARAM_PARSE_STRATEGY_URL_PARAM = 3;
以客户端请求Cookie作为限流因子
public static final int PARAM_PARSE_STRATEGY_COOKIE = 4;
复制代码
- SentinelGatewayFilterを解析コアソースコード
異なる選択することにより、フィルタによって拡張ゲートウェイセンチネルGatewayParamParser
次のようにあまりにも制限因子処理要求及びデータソースが配置されたソースと比較されます。
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
Mono<Void> asyncResult = chain.filter(exchange);
if (route != null) {
String routeId = route.getId();
Object[] params = paramParser.parseParameterFor(routeId, exchange,
r -> r.getResourceMode() == SentinelGatewayConstants.RESOURCE_MODE_ROUTE_ID);
String origin = Optional.ofNullable(GatewayCallbackManager.getRequestOriginParser())
.map(f -> f.apply(exchange))
.orElse("");
asyncResult = asyncResult.transform(
new SentinelReactorTransformer<>(new EntryConfig(routeId, EntryType.IN,
1, params, new ContextConfig(contextName(routeId), origin)))
);
}
Set<String> matchingApis = pickMatchingApiDefinitions(exchange);
for (String apiName : matchingApis) {
Object[] params = paramParser.parseParameterFor(apiName, exchange,
r -> r.getResourceMode() == SentinelGatewayConstants.RESOURCE_MODE_CUSTOM_API_NAME);
asyncResult = asyncResult.transform(
new SentinelReactorTransformer<>(new EntryConfig(apiName, EntryType.IN, 1, params))
);
}
return asyncResult;
}
复制代码
デモンストレーション効果
-
わずか5要求ごとにより構成され、よりナコスでは、我々は使用
jmeter 4.0
同時実行スレッド10をテストするために、 -
なお、図は、信頼できる制限センチネルによって証明することができます
制限パラメータの動的変更
sentinel-datasource-nacos
センチネルデータソースとして、リアルタイム管理テーブルナコスから閾値として制限パラメータをリフレッシュすることができます- 現在、センチネルダッシュボード1.6.2はまだグラフィカルな制御フロー制御ゲートウェイを達成するために、
1.7.0
この機能を増加します
概要
- もっと個人的なリファレンスソースプロジェクト春の雲、Vueの独立した開発プラットフォームをベースにOAuth2.0の開発に基づいて
- QQ:2270033969一緒にあなたが春の雲にそれを使用しているかについて話をします。
ようこそ私たちはより多くの楽しみのJavaEE練習を取得フォロー