Springcloud系列 - gateway入门

gateway和zuul的区别

spring-cloud-Gatewayspring-cloud的一个子项目。而zuul则是netflix公司的项目,只是spring将zuul集成在spring-cloud中使用而已。
因为zuul2.0连续跳票和zuul1的性能表现不是很理想,所以催生了spring团队开发了Gateway项目。

Zuul:

  • 使用的是阻塞式的 API,不支持长连接,比如 websockets。
  • 底层是servlet,Zuul处理的是http请求
  • 没有提供异步支持,流控等均由hystrix支持。
  • 依赖包spring-cloud-starter-netflix-zuul。

Gateway:

  • Spring Boot和Spring Webflux提供的Netty底层环境,不能和传统的Servlet容器一起使用,也不能打包成一个WAR包。
  • 依赖spring-boot-starter-webflux和/ spring-cloud-starter-gateway
  • 提供了异步支持,提供了抽象负载均衡,提供了抽象流控,并默认实现了RedisRateLimiter限流。

相同点:底层都是servlet,两者都是web网关,处理的http请求

不同点

  • 内部实现:

            1: gateway对比zuul多依赖了spring-webflux,在spring的支持下,功能更强大,内部实现了限流、负载均衡等,扩展性也更强,但同时也限制了仅适合于Spring Cloud套件。
            2: zuul则可以扩展至其他微服务框架中,其内部没有实现限流、负载均衡等。

  • 是否支持异步:

            1: zuul仅支持同步。
            2: gateway支持异步。理论上gateway则更适合于提高系统吞吐量(但不一定能有更好的性能),最终性能还需要通过严密的压测来决定

  • 框架设计的角度:

            1:gateway具有更好的扩展性,并且其已经发布了2.0.0的RELESE版本,稳定性也是非常好的

  • 性能:

            1:WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。Spring webflux 有一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现非常好。使用非阻塞API。 Websockets得到支持,并且由于它与Spring紧密集成,所以将会是一个更好的 开发 体验。Zuul 1.x,是一个基于阻塞io的API Gateway。
            2:Zuul已经发布了Zuul 2.x,基于Netty,也是非阻塞的,支持长连接,但Spring Cloud暂时还没有整合计划。

核心概念:

Route(路由):构建网关的基本模块,由ID,目标URI,一系列的短语和过滤器组成,如果断言为true则匹配该路由。

Predicate(断言):输入类型是一个ServerWebExchange,用于匹配HTTP请求中的所有内容,如请求头,请求体

Filter(过滤器):指的是Spring框架中的GatewayFilter实例,使用过滤器,可以在请求被路由前后缀之后对请求进行修改.

工作流程:类似SpringMVC

1: 客户端向Spring Cloud Gateway发出请求,然后在Gateway Handler Mapping中找到与请求匹配的路由,将其发送到Gateway Web Handler。
2: Handler再通过指定的过滤器链将请求发送到我们时间的服务执行业务逻辑,然后返回。
3: Flieter在执行业务逻辑前可以做参数校验、权限校验、流量监控、日志输出、协议转换等,
4: 在执行业务逻辑后可以做响应内容、响应头的修改,日志的输出,流量监控等。

快速入门 

1: 添加依赖

<dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-gateway</artifactId>
       </dependency>

注意!有个小坑,引入gateway时,需要排除springboot-web包,因为gateway内置用springWebFlux实现,不需要web包,否则会报错 

2: 配置路由

通过服务地址简单路由

server:
  port: 9527
 
spring:
  application:
    name: cloud-gateway-service
  cloud:
    gateway:
      routes:
        #路由id,没有固定规则,但要求唯一,建议配合服务名
        - id: payment_routh
          #匹配后提供服务的路由地址
          uri: http://localhost:8001
          predicates:
            #路径断言,路径匹配就进行路由
            - Path=/payment/get/**

面向服务的配置动态路由:

以上配置路由方式虽然实现了网关跳转,但还是存在缺陷:配置时必须知道被调用服务的ip和端口,一个服务存在多实例时每个实例都得配置。而服务的相关信息在注册中心都有,所以可以结合注册中心完成动态配置路

spring:
  application:
    name: cloud-gateway-service
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true #开启从注册中心动态创建路由的功能
      routes:
        #路由id,没有固定规则,但要求唯一,建议配合服务名
        - id: payment_routh
          #匹配后提供服务的路由地址
          uri: lb://cloud-payment-service
          predicates:
            #路径断言,路径匹配就进行路由
            - Path=/payment/get/**

或者通过bean的方式配置(不推荐):

@Configuration
public class GateWayConfig {
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
        RouteLocator routh1 = routes.route("routh1",
                r -> r.path("/payment/get/**")
                        .uri("lb://cloud-payment-service")).build();
 
        return routh1;
    }
}

3:  测试

启动网关服务和我们的测试服务

访问:http://localhost:9527/payment/get/1也可以正常访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SpringCloud Gateway是一个基于Spring Cloud的全新项目,它是基于Spring 5.0、Spring Boot 2.0和Project Reactor等技术开发的网关。它的主要目标是为微服务架构提供一种简单有效的统一API路由管理方式。SpringCloud Gateway具有许多特性,包括动态路由、断路器功能、服务发现功能、请求限流功能和支持路径重写等。它是基于WebFlux框架实现的,底层使用了高性能的Reactor模式通信框架Netty。总之,SpringCloud Gateway是一个功能强大且易于使用的网关,可用于构建和管理微服务架构中的API路由。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [springcloud入门——gateway](https://blog.csdn.net/tang_seven/article/details/118523647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [springcloudGateWay](https://blog.csdn.net/qq_35512802/article/details/122049808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值