(1)環(huán)境搭建
導入Sentinel 的相應依賴
<dependency> ? ?
com.alibaba.csp?
sentinel-spring-cloud-gateway-adapter?
?<version>a.b.c</version>
?</dependency>
(2) 編寫配置類
@Configuration
? public class GatewayConfiguration {
? ? private final List<ViewResolver> viewResolvers;
? ? private final ServerCodecConfigurer serverCodecConfigurer;
public GatewayConfiguration(ObjectProvider<List<ViewResolver>> viewResolversProvider,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ServerCodecConfigurer serverCodecConfigurer) {? ??
? ? this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);? ? ? ? this.serverCodecConfigurer = serverCodecConfigurer;??
? }
? ? /**? ? * 配置限流的異常處理器:SentinelGatewayBlockExceptionHandler? ? */? ?
@Bean? ?
@Order(Ordered.HIGHEST_PRECEDENCE)? ?
public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() {? ? ? ? return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer);? ? }
? ? /**? ? * 配置限流過濾器? ? */? ?
@Bean? ?
?@Order(Ordered.HIGHEST_PRECEDENCE)? ?
?public GlobalFilter sentinelGatewayFilter() {? ? ? ? return new SentinelGatewayFilter();? ? }
? ? /**? ? * 配置初始化的限流參數(shù)? ? */? ?
?@PostConstruct? ?
public void initGatewayRules() {? ? ? ?
?Set<GatewayFlowRule> rules = new HashSet<>();? ? ? ?
?rules.add(? ? ? ? ? ?
?????new GatewayFlowRule("order-service") //資源名稱? ? ? ? ? ? ? ? ? ?
????.setCount(1) // 限流閾值? ? ? ? ? ? ? ? ? ?
????.setIntervalSec(1) // 統(tǒng)計時間窗口郭计,單位是秒乒裆,默認是 1 秒? ? ? ? );? ? ? ? GatewayRuleManager.loadRules(rules);? ?
}
?}
(3) 編寫配置類
(4)自定義異常提示 當觸發(fā)限流后頁面顯示的是Blocked by Sentinel: FlowException。為了展示更加友好的限流提示寄症, Sentinel支持自定義異常處理。
您可以在 GatewayCallbackManager 注冊回調(diào)進行定制:
setBlockHandler :注冊函數(shù)用于實現(xiàn)自定義的邏輯處理被限流的請求此疹,對應接口為 BlockRequestHandler 唤崭。默認實現(xiàn)為 DefaultBlockRequestHandler ,當被限流時會返回類似 于下面的錯誤信息: Blocked by Sentinel: FlowException 超陆。
(5) 參數(shù)限流
上面的配置是針對整個路由來限流的,如果我們只想對某個路由的參數(shù)做限流浦马,那么可以使用參數(shù)限流 方式:
通過指定PARAM_PARSE_STRATEGY_URL_PARAM表示從url中獲取參數(shù)时呀,setFieldName指定參數(shù)名稱?
(6) 自定義API分組