SpringCloud Zuul 微服务网关是 netflex 集成于其余服务,Zuul 2.0中止更新
SpringCloud Gateway 是 Spring 本身研发的java
1. https://spring.io/guides/gs/gateway/ 2. 根据官方文档能够进行了解使用
第一部分先简单的实现一个小的Demospring
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”。