Spring Cloud 網關 Gateway 配置使用 springcloud alibaba

客戶端向spring-cloud-gateway請求網關映射處理程序(gateway handler mapping),如果確認請求與路由匹配,則將請求發送到web處理程序(gateway web handler),web處理程序通過特定於該請求的過濾器鏈處理請求,圖中filters被虛線劃分的原因是filters可以在發送代理請求之前(pre filter)或之後執行邏輯(post filter)。先執行所有pre filter邏輯,然後進行請求代理。在請求代理執行完後,執行post filter邏輯。

開始使用Spring-Cloud-Gateway
Spring Cloud Gateway依賴Spring Boot和Spring Webflux提供的Netty runtime,所以springboot必須在2.0或者以上,springcloud在Finchley以上,基本springcloud環境確認後,然後引入:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

路由配置

官網都是用的yml配置文件配置,與properties配置文件配置稍有不同,我這裏全部使用properties配置文件配置。

直接使用註冊中心路由配置

#使用服務發現路由
spring.cloud.gateway.discovery.locator.enabled=true
#服務路由名小寫
spring.cloud.gateway.discovery.locator.lower-case-service-id=true

指定服務配置

#設置路由id
spring.cloud.gateway.routes[0].id=auth-service
#設置路由的uri
spring.cloud.gateway.routes[0].uri=lb://auth-service
#設置路由斷言,代理servicerId爲auth-service的/auth/路徑
spring.cloud.gateway.routes[0].predicates[0]= Path=/auth/**

spring.cloud.gateway.routes.predicates:路由斷言,配置時必須得有一項,不一定是Path;

spring.cloud.gateway.routes.uri:配置路由uri,"lb://‘serviceId’"前代表路由的服務,同時也可以是一個url

編碼服務配置

//java項目www.fhadmin.org
@Configuration
public class RoutesConfiguration {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes().route(predicateSpec ->
                predicateSpec.path("/auth/**").uri("lb://auth-service").id("auth-service")
        ).build();
    }

}

總結
Spring-Cloud-Gateway與Zuul 1.0相比,前者基於WebFlux與Reactive線程模型的異步非阻塞框架,服務通過底層的Netty來進行發佈及運行,異步非阻塞可以有效降低系統的線程數量,只需要很少的線程就可以完成較高的併發支持,而Zuul1.0是基於servlet性能上的差距可想而知,同時Spring-Cloud-Gateway還內置了許多的路由斷言(Factories)與過濾器(Filter)可以減少開發人員的編碼,和更好的功能支持和擴展
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章