Gateway 是 Spring Cloud 新推出的網關框架,該項目基於 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術,底層使用了高性能的通信框架Netty。
網關的作用:在沒有API網關作為統一出口的情況下,需要調用方自己組合各種服務,而且容易讓調用方感知后端各種服務的存在,加入網關后,客戶端調用服務需要通過網關來進行,並且網關可以處理路由,安全,限流,緩存,日志,監控,重試,熔斷等事務,使業務開發更純凈。
網關的作用:在沒有API網關作為統一出口的情況下,需要調用方自己組合各種服務,而且容易讓調用方感知后端各種服務的存在,加入網關后,客戶端調用服務需要通過網關來進行,並且網關可以處理路由,安全,限流,緩存,日志,監控,重試,熔斷等事務,使業務開發更純凈。
一些概念:
Route(路由):這是網關的基本構建塊。它由一個 ID,一個目標 URI,一組斷言和一組過濾器定義。如果斷言為真,則路由匹配。
Predicate(斷言):這是一個 Java 8 的 Predicate。我們可以使用它來匹配來自 HTTP 請求的任何內容。
Filter(過濾器):這是org.springframework.cloud.gateway.filter.GatewayFilter的實例,我們可以使用它修改請求和響應。
使用:
1.導入依賴:
<!--gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
注:sprint-boot-starter-web這個依賴是不能引入,否則getway不能使用。
2.啟動類:
@SpringBootApplication
@EnableEurekaClient
public class GetwayMain {
public static void main(String[] args) {
SpringApplication.run(GetwayMain.class,args);
}
}
3.配置路由,getway當中配置路由有兩種方式,第一種是通過yml配置文件的方式配置路由,第二種是通過配置類的方式來配置路由
使用yml:
spring:
application:
name: cloud-getway
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: payment_routh #id
#uri: http://localhost:8001 #匹配的路由地址
uri: lb://cloud-payment-service
predicates:
- Path=/payment/get/** #斷言路徑匹配進行路由
- id: payment_routh
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/lb/**
使用配置類:
@Configuration
public class GetwayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route("com.74120",r->r.path("/guonei").uri("http://news.baidu.com/guonei")).build();
return routes.build();
}
}
Route(路由):這是網關的基本構建塊。它由一個 ID,一個目標 URI,一組斷言和一組過濾器定義。如果斷言為真,則路由匹配。
Predicate(斷言):這是一個 Java 8 的 Predicate。我們可以使用它來匹配來自 HTTP 請求的任何內容。
Filter(過濾器):這是org.springframework.cloud.gateway.filter.GatewayFilter的實例,我們可以使用它修改請求和響應。
使用:
1.導入依賴:
<!--gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
注:sprint-boot-starter-web這個依賴是不能引入,否則getway不能使用。
2.啟動類:
@SpringBootApplication
@EnableEurekaClient
public class GetwayMain {
public static void main(String[] args) {
SpringApplication.run(GetwayMain.class,args);
}
}
3.配置路由,getway當中配置路由有兩種方式,第一種是通過yml配置文件的方式配置路由,第二種是通過配置類的方式來配置路由
使用yml:
spring:
application:
name: cloud-getway
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: payment_routh #id
#uri: http://localhost:8001 #匹配的路由地址
uri: lb://cloud-payment-service
predicates:
- Path=/payment/get/** #斷言路徑匹配進行路由
- id: payment_routh
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/lb/**
使用配置類:
@Configuration
public class GetwayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route("com.74120",r->r.path("/guonei").uri("http://news.baidu.com/guonei")).build();
return routes.build();
}
}