Spring Cloud Gateway 整合Eureka路由轉發
前面我們對Spring Cloud Gateway進行了一個入門的學習,具體文章可以檢視《Spring Cloud Gateway 閘道器嚐鮮》進行學習。
閘道器負責轉發工作,那麼它需要知道後端的服務資訊,今天我們來學習下Spring Cloud Gateway 整合Eureka的操作,實現服務轉發功能。
在之前的基礎上新增eureka-client的依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
下面就是配置具體的轉發規則了,這邊需要注意下的是uri的配置:
server:
port: 8084
spring:
cloud:
gateway:
routes:
- id: fsh-house
uri: lb://fsh-house
predicates:
- Path=/house/**
application:
name: fangjia-gateway
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://yinjihuan:123456@master:8761/eureka/
uri以lb://開頭(lb代表從註冊中心獲取服務),後面接的就是你需要轉發到的服務名稱,這個服務名稱必須跟eureka中的對應,否則會找不到服務,錯誤如下:
org.springframework.cloud.gateway.support.NotFoundException: Unable to find instance for fsh-house1
如果引入了spring-cloud-starter-netflix-eureka-client包,但你不想整合Eureka,也可以通過下面的配置關閉:
eureka.client.enabled=false
說完了直接配置路由的方式,我們來說說不配置的方式也能轉發,有用過Zuul的同學肯定都知道,Zuul預設會為所有服務都進行轉發操作,只需要在訪問路徑上指定要訪問的服務即可,通過這種方式就不用為每個服務都去配置轉發規則,當新加了服務的時候,不用去配置路由規則和重啟閘道器。
在Spring Cloud Gateway中當然也有這樣的功能,只需要通過配置即可開啟,配置如下:
spring.cloud.gateway.discovery.locator.enabled=true
開啟之後我們就可以通過地址去訪問服務了,格式如下:
http://閘道器地址/服務名稱(大寫)/**
http://localhost:8084/FSH-HOUSE/house/1
這個大寫的名稱還是有很大的影響,如果我們從Zull升級到Spring Cloud Gateway的話意味著請求地址有改變,或者重新配置每個服務的路由地址,通過原始碼我發現可以做到相容處理,再增加一個配置即可:
spring.cloud.gateway.discovery.locator.lowerCaseServiceId=true
配置完成之後我們就可以通過小寫的服務名稱進行訪問了,如下:
http://閘道器地址/服務名稱(小寫)/**
http://localhost:8084/fsh-house/house/1
配置原始碼:org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties
@ConfigurationProperties("spring.cloud.gateway.discovery.locator")
public class DiscoveryLocatorProperties {
/** Flag that enables DiscoveryClient gateway integration */
private boolean enabled = false;
/**
* The prefix for the routeId, defaults to discoveryClient.getClass().getSimpleName() + "_".
* Service Id will be appended to create the routeId.
*/
private String routeIdPrefix;
/**
* SpEL expression that will evaluate whether to include a service in gateway integration or not,
* defaults to: true
*/
private String includeExpression = "true";
/** SpEL expression that create the uri for each route, defaults to: 'lb://'+serviceId */
private String urlExpression = "'lb://'+serviceId";
/**
* Option to lower case serviceId in predicates and filters, defaults to false.
* Useful with eureka when it automatically uppercases serviceId.
* so MYSERIVCE, would match /myservice/**
*/
private boolean lowerCaseServiceId = false;
private List<PredicateDefinition> predicates = new ArrayList<>();
private List<FilterDefinition> filters = new ArrayList<>();
}
文章原始碼參考地址:
https://github.com/yinjihuan/spring-cloud/tree/master/fangjia-gateway
歡迎加入我的知識星球,一起交流技術,免費學習猿天地的課程(http://cxytiandi.com/course)
PS:目前星球中正在星主的帶領下組隊學習Spring Cloud,等你哦!
相關文章
- Spring Cloud Gateway 路由轉發之After(Before)路由斷言工廠使用SpringCloudGateway路由
- spring-cloud-gateway靜態路由SpringCloudGateway路由
- SpringCloud元件: GateWay整合Eureka轉發服務請求SpringGCCloud元件Gateway
- spring cloud gateway 原始碼解析(2)動態路由SpringCloudGateway原始碼路由
- Spring Cloud Gateway實戰之三:動態路由SpringCloudGateway路由
- Spring cloud系列教程第十篇- Spring cloud整合Eureka總結篇SpringCloud
- 【Spring Cloud】之 EurekaSpringCloud
- 4、Spring Cloud EurekaSpringCloud
- Spring Cloud Gateway 深入SpringCloudGateway
- Spring cloud 之GatewaySpringCloudGateway
- 整合spring cloud雲架構 - Gateway的基本入門SpringCloud架構Gateway
- Spring Cloud Gateway實戰之二:更多路由配置方式SpringCloudGateway路由
- Spring Cloud(九)高可用的分散式配置中心 Spring Cloud Config 整合 Eureka 服務SpringCloud分散式
- Spring Cloud服務發現元件EurekaSpringCloud元件
- Spring Cloud Gateway 整合阿里 Sentinel閘道器限流實戰!SpringCloudGateway阿里
- Spring Cloud 之 Eureka.SpringCloud
- Spring Cloud Gateway 限流操作SpringCloudGateway
- Spring Cloud Gateway 入門SpringCloudGateway
- Spring Cloud Gateway示例 | DevGlanSpringCloudGatewaydev
- spring cloud gateway 不生效SpringCloudGateway
- Spring cloud(2)-服務發現(Eureka,Consul)SpringCloud
- Spring Cloud Alibaba實戰(七) - Gateway搭配Nacos實現動態路由SpringCloudGateway路由
- 服務治理: Spring Cloud EurekaSpringCloud
- (8)SpringCloud-Spring Cloud EurekaSpringGCCloud
- spring cloud gateway 之限流篇SpringCloudGateway
- spring cloud gateway之filter篇SpringCloudGatewayFilter
- Spring Cloud Gateway 入門案例SpringCloudGateway
- Spring Cloud Gateway 聚合swagger文件SpringCloudGatewaySwagger
- 聊聊spring cloud gateway的XForwardedHeadersFilterSpringCloudGatewayForwardHeaderFilter
- 快速突擊 Spring Cloud GatewaySpringCloudGateway
- Spring Cloud Gateway入坑記SpringCloudGateway
- Spring Cloud Gateway使用簡介SpringCloudGateway
- Spring Cloud Gateway初體驗SpringCloudGateway
- Spring Cloud Gateway限流實戰SpringCloudGateway
- java Spring Cloud企業快速開發架構之SpringCloud-Spring Cloud EurekaJavaSpringCloud架構GC
- Spring Cloud Gateway入門 - spring.ioSpringCloudGateway
- Spring Cloud 整合SpringCloud
- Spring Cloud— 五、註冊中心EurekaSpringCloud