springcloud2+gateway閘道器配置中心2(包含熔斷,jwt認證,限流)
阿新 • • 發佈:2018-11-22
下面介紹1未講完的閘道器功能
1重試功能,配置如下
這裡可以不寫實現類,採用預設的方式配置,然後傳送一個http的GET請求,試著斷開服務端檢視後臺:
證明配置正確,起作用了!
2Jwt攔截器過濾
直接配置在規則路由routes下面,然後寫實現類
所寫的實體類都是要整合AbstractGatewayFilterFactory閘道器攔截器工廠介面。因為都是在filters攔截器下的配置屬性
這裡為啥不做認證配置呢,因為我的專案目前基礎資訊的auth2的認證服務和資源服務都是放在了一個服務上,所以這裡面只需要對請求頭攜帶token判斷,簡化了閘道器所需要的資訊,但也帶出來一個問題,如何來讓未攜帶token認證服務通過閘道器介面呢,目前的設計思路如下
1直接在啟動類手寫Bean類,可以繞過配置服務的規則路由,這樣就可以拿到認證Token
2單獨為login配置一套,參照認證服務簡單的模板,2種方法效果一致
3限流
限流幾種方式:介面限流,使用者限流,IP限流
建立配置檔案GatewayConfiguration如下
package com.wjx.gateway.Controller.common.config; import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import reactor.core.publisher.Mono; /** * 配置限流key */ @Configuration public class GatewayConfiguration { /** * 介面限流操作 * @return */ @Bean(name="apiKeyResolver") public KeyResolver apiKeyResolver() { //根據api介面來限流 return exchange -> Mono.just(exchange.getRequest().getPath().value()); } /** * ip限流操作 * @return */ @Bean public KeyResolver ipKeyResolver() { return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName()); } /** * 使用者限流 * 使用這種方式限流,請求路徑中必須攜帶userId引數。 * @return */ // @Bean // KeyResolver userKeyResolver() { // return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("userId")); // } } 其實這樣配置就應該可以實現限流的目的了(由於本人電腦沒安裝JMTER,效能有點差跑不動這幾個專案了,沒測試)
借鑑其他人寫的方法,其實也可以對限流進行具體的,因為不能測試,所以沒做深入研究,下面只提供方法
去掉預設的限流限定
繼承AbstractGatewayFilterFactory工廠類,寫一個攔截器類和一個限流類
這樣可以比配置檔案更加做到細緻,如果有人做到了這一步,歡迎把測試結果告訴我,謝謝!!!