SpringCloud_Gateway

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 配置文件
    
        
        
            
                
                    org.springframework.cloud
                    spring-cloud-dependencies
                    Finchley.M7
                    pom
                    import
                
            
        
        
            
                org.springframework.cloud
                spring-cloud-starter-gateway
            
        
        
        
            
                spring-milestones
                Spring Milestones
                https://repo.spring.io/libs-milestone
                
                    false
                
            
        
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() {
            @Override
            public RouteLocatorBuilder.Builder apply(PredicateSpec predicateSpec) {
                return predicateSpec.path("/taobao")
                        .filters(new Function() {
                            @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”。     

你可能感兴趣的:(gateway,springcloud)