天天看點

SpringCloud中路由gateway實操

路由Gateway

是什麼

Gateway旨在提供一種簡單而有效的方式來對API進行路由,以及提供一些強大的過濾器功能,例如:熔斷、限流、重試等。

SpringCloud Gateway的目标提供統一的路由方式且基于Filter鍊的方式提供了網關基本的功能,例如:安全、監控/名額、和限流。

幹什麼

 反向代理

 鑒權

 流量控制

 熔斷

 日志監控

功能:

路由轉發+執行過濾器鍊

怎麼幹

可以參考子父工程可以參考 上期Nacos結合使用

https://blog.csdn.net/qq_56602812/article/details/126214010?spm=1001.2014.3001.5501

上期Nacos配置中心

1.與配置中心Nacos結合

1.pom檔案

<!--新增gateway,不需要引入web和actuator子產品-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
           

2.yml配置檔案(nacos配置中心的檔案)

server:
  port: 8300
spring:
  cloud:
    gateway:
      routes:
       - id: employee_routh #路由的ID,沒有固定規則但要求唯一,建議配合服務名
         uri: http://localhost:8100   #比對後提供服務的路由位址
         predicates:
           - Path=/employees/employee/**   #斷言,路徑相比對的進行路由
           
           

yml檔案第二中寫法(可以實作負載均衡)

server:
  port: 8300
spring:
  cloud: 
    gateway:
      discovery:
        locator:
          enabled: true  #開啟從注冊中心動态建立路由的功能,利用微服務名進行路由      
      routes:
       - id: employee_routh #路由的ID,沒有固定規則但要求唯一,建議配合服務名
         uri: http://localhost:8100   #比對後提供服務的路由位址
         predicates:
           - Path=/employees/employee/**   #斷言,路徑相比對的進行路由
 
           

注意:

需要注意的是uri的協定為lb,表示啟用Gateway的負載均衡功能。

lb://serviceName是spring cloud gateway在微服務中自動為我們建立的負載均衡uri

代理路徑localhost:8100的服務

3.加上啟動注解(nacos配置中心)

@EnableDiscoveryClient //nacos

4.啟動項目

1.啟動8100端口項目

SpringCloud中路由gateway實操

2.啟動路由代理8100的項目

SpringCloud中路由gateway實操

2.Predicate的使用

是什麼

Predicate就是為了實作一組比對規則,讓請求過來找到對應的Route進行處理。就是給路由通路提供一些通路規則。

配合yml中使用

predicates:
            - Path=/employees/lb/**   #斷言,路徑相比對的進行路由
            #- After=2022-03-08T10:59:34.102+08:00[Asia/Shanghai]
            #- Cookie=username,zhangshuai #并且Cookie是username=zhangshuai才能通路
            #- Header=X-Request-Id, \d+ #請求頭中要有X-Request-Id屬性并且值為整數的正規表達式
            #- Host=**.hand.com
            #- Method=GET
            #- Query=username, \d+ #要有參數名稱并且是正整數才能路由

           

3.Filter的使用

是什麼 :

路由過濾器可用于修改進入的HTTP請求和傳回的HTTP響應,路由過濾器隻能指定路由進行使用。

3.1自定義過濾器

幹什麼

全局日志記錄

統一網關鑒權

自定義全局GlobalFilter

兩個主要接口介紹 主要實作下面接口

impiemerts GlobalFilter ,Ordered

實作過濾方法

@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {
    /**
     * 自定義實作過濾規則的方法
     *
     * @param exchange
     * @param chain
     * @author PC 2022-08-07 23:20
     * @return reactor.core.publisher.Mono<java.lang.Void>
     */
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
      log.info("------welcom MyLogGateWayFilter"+new Date());
        String token = exchange.getRequest().getQueryParams().getFirst("token");
        if(StringUtils.isEmpty(token)){
            log.info("使用者名為Null非法使用者(---)");
           return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }

           

3.1實作效果

路徑沒有拼接token規則

SpringCloud中路由gateway實操

控制台

SpringCloud中路由gateway實操

路徑拼接token 符合要求放行

SpringCloud中路由gateway實操