Springcloud教程——GateWay閘道器元件

Alex_yuan666發表於2020-12-18

目錄

概述

入門案例

路由配置

過濾器配置

自定義過濾器

全域性過濾器

區域性過濾器

GateWay中hystrix設定

GateWay中設定Ribbon

GateWay中跨域問題

GateWay的高可用

GateWay與Feign的區別


概述

GateWay是一個閘道器應用,閘道器的作用就是過濾請求,將請求轉發到對應的微服務上,這麼做的好處是讓請求不直接訪問微服務而是通過閘道器,這樣就可以對請求進行管理,隱藏微服務的ip和埠增強微服務的隱蔽性。最要的兩個作用就是過濾和請求。

入門案例

1.由於GateWay本身一個微服務需要註冊到Eureka當中,因此第一步需要建立一份maven工程,引入GateWay依賴和eureka客戶端依賴


<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>
</project>

2.gateway工程也是微服務工程因此啟動項的依賴與其他微服務工程一樣,需要新增eureka發現註解和springboot啟動註解

@EnableDiscoveryClient
@SpringBootApplication
public class GateWayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GateWayApplication.class,args);
    }
}

路由配置

predicates:配置路由對映的路徑。
spring:
  application:
    #eureka中閘道器服務的名稱
    name: gateway-server
  cloud:
    gateway:
      routes:
        #路由的id
        - id: user-server-route
          #使用服務名稱替代地址,eureka中不止一個服務
          uri: lb://springcloud-server
          #配置請求轉發的
          #uri: http://127.0.0.1:8082
          #路由斷言,配置訪問的路徑
            predicates:
           - Path=/testserver/**

過濾器配置

Filter:prefixpath配置訪問的字首,訪問的路徑predicates的路徑可以設定成./**,來表示需要對映的路徑,如果predicates設定的路徑名稱比較全如/server/user/**,那麼可以設定去除字首stripprefix,設定數值,1代表去除一個字首,原來的/server/user/**訪問路徑可以改為/user/**

          filters:
            #配置訪問的路勁的字首
           #- PrefixPath=/testserver
           #去除字首1個字首
           - StripPrefix=1

自定義過濾器

全域性過濾器

不需要再yml中配置,實現GlobalFilter去設定

區域性過濾器

作用:針對某個路由進行設定過濾器,編寫過濾類繼承MyParamGatewayFilterFactory類

GateWay中hystrix設定

gateway預設整合了Hystrix,配置值是預設的,可在yml中修改配置

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 5000

GateWay中設定Ribbon

GateWay中整合了ribbon實現負載均衡,可在yml修改配置

ribbon:
  ConnectTimeout: 1000
  ReadTimeout: 2000
  MaxAutoRetries: 0
  MaxAutoRetriesNextServer: 0

GateWay中跨域問題

跨域:前端訪問的地址與當前伺服器的地址不一致則會出現請求不到的跨域問題。在GateWay中可以設定其他伺服器可通過訪問的地址。

   gateway:
      globalcors:
        cors-configurations:
          '[/**]':
            allowedOrigins:
              - "http://127.1.1:9909"
            allowedMethods:
              - GET

'[/**]':所有當問閘道器伺服器的地址

allowedOrigins:允許跨域訪問的地址由那些,可填寫多個。

allowedMethods:允許跨域訪問的請求型別有那些,可填寫多個。

GateWay的高可用

GateWay既然也是為微服務,那就可以啟動多個GateWay作為叢集,內部網路訪問gateway沒用問題,要實現外部請求的負載均衡可以使用nginx作為負載均衡代理伺服器,從nginx中轉發請求到GateWay當中,GateWay收到請求查詢Eureka中的服務進行呼叫。

GateWay與Feign的區別

GateWay:接收外部請求轉發給其他微服務。

Feign:將微服務中的介面暴露,讓其他微服務呼叫,主要用在微服務直接的呼叫。

 

相關文章