SpringCloud 第二代微服务网关
SpringCloud Zuul 微服务网关是 netflex 集成于其他服务,Zuul 2.0停止更新
SpringCloud Gateway 是 Spring 自己研发的
1. 官网地址
1. https://spring.io/guides/gs/gateway/
2. 根据官方文档可以进行了解使用
2. Gateway -- 简单例子
第一部分先简单的实现一个小的Demo
1. 工程使用的Spring Boot版本为2.0.1.RELEASE,Spring Cloud版本为Finchley.M7
2. 新建一个 Maven 工程 SpringCloud_Gateway_demo1
3. pom.xml 配置文件
<!-- 管理依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
4. 创建一个简单的路由 :
1. 在SpringCloud Gateway中使用 RouteLocator 的Bean 进行路由转发
将请求进行处理,发送到目标服务,类似于nignx的反向代理
r -> r.path("/taobao").url("http://www.163.com); 使用的是java 中的lambda 表单式
@Bean
public RouteLocator customerRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
/*return routeLocatorBuilder.routes().route(
r -> r.path("/taobao")
.filters(f -> f.addRequestHeader("Hello","World"))
.uri("http://www.163.com")
)
.build();*/
return routeLocatorBuilder.routes().route(new Function<PredicateSpec, RouteLocatorBuilder.Builder>() {
@Override
public RouteLocatorBuilder.Builder apply(PredicateSpec predicateSpec) {
return predicateSpec.path("/taobao")
.filters(new Function<GatewayFilterSpec, UriSpec>() {
@Override
public UriSpec apply(GatewayFilterSpec gatewayFilterSpec) {
return gatewayFilterSpec.addRequestHeader("Hello","world");
}
})
.uri("http://163.com");
}
}).build();
}
2. 在上边中的 customerRouteLocator 方法中,使用 RouteLocatorBuilder 进行路由的创建
RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断言的意思,顾名思义就是根据
具体的请求的规则,由具体的route去处理,filters是各种过滤器,用来对请求做各种判断和修改.
3. 在访问地址时,打开网络调试,可以发现在请求头中添加了 Hello : "world"
### 3. Gateway 中使用 Hystrix
1. 在SpringCloud Gateway 中可以使用 Hystrix,Hystrix是 spring cloud中一个服务熔断降级的组件,在微服务系统有着十分重要的作用。
Hystrix是 spring cloud gateway中是以filter的形式使用的
@Bean
public RouteLocator customerRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
return routeLocatorBuilder.routes().route(
r -> r.path("/taobao")
.filters(
f -> f.addRequestHeader("Hello","World")
)
.uri("http://httpbin.org:80")
).route(
r -> r.host("*.hystrix.com")
.filters(f -> f.hystrix(config -> config
.setName("mycmd")
.setFallbackUri("forward:/fallback"))).uri("http://httpbin.org:80")
).build();
}
我们使用了另外一个router,该router使用host去断言请求是否进入该路由,当请求的host有“*.hystrix.com”,都会进入该router,该router中有一个hystrix的filter,该filter可以配置名称、和指向性fallback的逻辑的地址,比如本案例中重定向到了“/fallback”。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。