官方簡(jiǎn)介
該項(xiàng)目提供了一個(gè)建立在Spring Ecosystem之上的API網(wǎng)關(guān)古沥,包括:Spring 5魔招,Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一種簡(jiǎn)單而有效的方式來(lái)對(duì)API進(jìn)行路由概页,并為他們提供切面肾请,例如:安全性,監(jiān)控/指標(biāo) 和彈性等贴浙。
官方工作原理介紹
客戶端向spring-cloud-gateway
請(qǐng)求網(wǎng)關(guān)映射處理程序
(gateway handler mapping)砂吞,如果確認(rèn)請(qǐng)求與路由匹配,則將請(qǐng)求發(fā)送到web處理程序
(gateway web handler)悬而,web處理程序
通過(guò)特定于該請(qǐng)求的過(guò)濾器鏈處理請(qǐng)求,圖中filters
被虛線劃分的原因是filters可以在發(fā)送代理請(qǐng)求之前(pre filter
)或之后執(zhí)行邏輯(post filter
)锭汛。先執(zhí)行所有pre filter
邏輯笨奠,然后進(jìn)行請(qǐng)求代理袭蝗。在請(qǐng)求代理執(zhí)行完后,執(zhí)行post filter
邏輯般婆。
開(kāi)始使用Spring-Cloud-Gateway
Spring Cloud Gateway依賴Spring Boot和Spring Webflux提供的Netty runtime到腥,所以springboot必須在2.0或者以上
,springcloud在Finchley
以上蔚袍,基本springcloud環(huán)境確認(rèn)后乡范,然后引入:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
路由配置
官網(wǎng)都是用的yml
配置文件配置,與properties
配置文件配置稍有不同啤咽,我這里全部使用properties
配置文件配置晋辆。
直接使用注冊(cè)中心路由配置
#使用服務(wù)發(fā)現(xiàn)路由
spring.cloud.gateway.discovery.locator.enabled=true
#服務(wù)路由名小寫(xiě)
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
指定服務(wù)配置
#設(shè)置路由id
spring.cloud.gateway.routes[0].id=auth-service
#設(shè)置路由的uri
spring.cloud.gateway.routes[0].uri=lb://auth-service
#設(shè)置路由斷言,代理servicerId為auth-service的/auth/路徑
spring.cloud.gateway.routes[0].predicates[0]= Path=/auth/**
spring.cloud.gateway.routes.predicates
:路由斷言,配置時(shí)必須得有一項(xiàng)宇整,不一定是Path
瓶佳;
spring.cloud.gateway.routes.uri
:配置路由uri,"lb://'serviceId'"前代表路由的服務(wù)鳞青,同時(shí)也可以是一個(gè)url
編碼服務(wù)配置
@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();
}
}
總結(jié)
Spring-Cloud-Gateway與Zuul 1.0相比霸饲,前者基于WebFlux與Reactive線程模型的異步非阻塞框架,服務(wù)通過(guò)底層的Netty來(lái)進(jìn)行發(fā)布及運(yùn)行臂拓,異步非阻塞可以有效降低系統(tǒng)的線程數(shù)量厚脉,只需要很少的線程就可以完成較高的并發(fā)支持,而Zuul1.0是基于servlet性能上的差距可想而知胶惰,同時(shí)Spring-Cloud-Gateway還內(nèi)置了許多的路由斷言(Factories)
與過(guò)濾器(Filter)
可以減少開(kāi)發(fā)人員的編碼傻工,和更好的功能支持和擴(kuò)展。