• SpringCloud - Spring Cloud 之 Zuul和Gateway网关(十四)


    Spring Cloud Gateway是Spring Cloud的一个子项目。而zuul则是Netflix公司的项目,只是Spring 将zuul集成在Spring Cloud中使用而已。

    因为zuul2.0连续跳票和zuul1的性能表现不是很理想,所以催生了spring团队开发了Gateway项目

    Zuul

    Zuul是netflix公司的项目,本质上是web servlet,基于JavaEE Servlet技术栈,使用阻塞API,处理的是http请求,没有提供异步支持,不支持任何长连接,比如websocket

    依赖:

    1. <dependency>
    2. <groupId>org.springframework.cloud</groupId>
    3. <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    4. </dependency>

    核心配置

    1. server.port=81
    2. #eureka注册中心首页的Application这一栏
    3. spring.application.name=springcloud-7-service-eureka-zuul
    4. #每间隔5s,向Eureka服务注册中心发送一次心跳,证明服务是否依然“存活”
    5. eureka.instance.lease-renewal-interval-in-seconds=2
    6. #告诉服务端,如果10s之内没有发送心跳,就代表故障,将本服务踢出
    7. eureka.instance.lease-expiration-duration-in-seconds=10
    8. #告诉服务端,服务实例以IP作为链接,不是取机器名
    9. eureka.instance.prefer-ip-address=false
    10. #注册服务实例ID,,服务ID必须唯一
    11. eureka.instance.instance-id=springcloud-7-service-eureka-zuul
    12. #注册中心的链接地址 http://localhost:8761/eureka
    13. eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka,http://eureka8762:8762/eureka,http://eureka8763:8763/eureka
    14. #设置Zuul超时时间
    15. zuul.host.connect-timeout-millis=6000
    16. zuul.host.socket-timeout-millis=6000
    17. #配置路由规则
    18. #/ **代表是所有(多个)层级 如:/springcloud/eureka/hystrix/goodHystrixList
    19. #/ * 是代表一层; 如: /hystrix/goodHystrixList 就不会被路由
    20. zuul.routes.portal.service-id=springcloud-6-service-eureka-hystrix-consumer
    21. zuul.routes.portal.path=/web/**
    22. #接口调用需要一定的规范,如调用微服务的API URL前缀需要加上/api
    23. #http://localhost:81/api/web/springcloud/eureka/hystrix/goodList1
    24. zuul.prefix=/api
    25. #通过自定义的规则进行访问,但是依然能用之前的微服务名调用,这是不合理的,第一是有多重地址了, 第二一般微服务名这种最好不要暴露在外,所以我们一般会禁用微服务名方式调用
    26. # 一个一个通过微服务名来配置难免有点复杂,所以一般这样配置来禁用所有
    27. # 禁用微服务名方式调用
    28. zuul.ignored-services=*
    29. #zuul.ignored-services=springcloud-6-service-eureka-hystrix-consumer
    30. #禁用过滤器
    31. zuul.LogFilter.route.disable=true
    32. #禁用 zuul 默认的异常处理 SendErrorFilter 过滤器,然后自定义 Errorfilter 过滤器
    33. zuul.SendErrorFilter.error.disable=true

    Gateway

    Spring Boot和Spring Webflux提供的Netty底层环境,不能和传统的Servlet容器一起使用,也不能打包成一个WAR包,使用非阻塞API,支持websocket。

    依赖

    1. <dependency>
    2. <groupId>org.springframework.cloud</groupId>
    3. <artifactId>spring-cloud-starter-gateway</artifactId>
    4. </dependency>

    核心配置

    1. server.port=81
    2. #eureka注册中心首页的Application这一栏
    3. spring.application.name=springcloud-7-service-eureka-gateway
    4. #每间隔5s,向Eureka服务注册中心发送一次心跳,证明服务是否依然“存活”
    5. eureka.instance.lease-renewal-interval-in-seconds=2
    6. #告诉服务端,如果10s之内没有发送心跳,就代表故障,将本服务踢出
    7. eureka.instance.lease-expiration-duration-in-seconds=10
    8. #告诉服务端,服务实例以IP作为链接,不是取机器名
    9. eureka.instance.prefer-ip-address=false
    10. #注册服务实例ID,,服务ID必须唯一
    11. eureka.instance.instance-id=springcloud-7-service-eureka-gateway
    12. #注册中心的链接地址 http://localhost:8761/eureka
    13. eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka,http://eureka8762:8762/eureka,http://eureka8763:8763/eureka
    14. #网关路由配置
    15. #路由 id,没有固定规则,但唯一,建议与服务名对应
    16. spring.cloud.gateway.routes-id=springcloud-6-service-eureka-hystrix-provider
    17. #匹配后提供服务的路由地址
    18. spring.cloud.gateway.routes.uri=http://localhost:9001
    19. #以下是断言条件,必选全部符合条件
    20. #断言,路径匹配 注意:Path 中 P 为大写
    21. spring.cloud.gateway.routes.predicates-Path=/service/**
    22. #只能是 GET 请求时,才能访问
    23. spring.cloud.gateway.routes.predicates-Method=GET

    相同点:

    1、底层都是servlet

    2、两者均是web网关,处理的是http请求

    不同点:

    1、内部实现:

    gateway对比zuul多依赖了spring-webflux,在spring的支持下,功能更强大,内部实现了限流、负载均衡等,扩展性也更强,但同时也限制了仅适合于Spring Cloud套件

    zuul则可以扩展至其他微服务框架中,其内部没有实现限流、负载均衡等。

    2、是否支持异步

    zuul仅支持同步

    Zuul1.0 使用的是 BIO(Blocking IO,同步阻塞) tomcat7.0 以前都是 BIO 性能一般 ;Zuul2.0 性能好,使用 NIONon-Blocking IO,同步非阻塞

    gateway支持异步,使用的 AIOa+nio = aio = async + no blocking io,异步非阻塞)。理论上gateway则更适合于提高系统吞吐量(但不一定能有更好的性能),最终性能还需要通过严密的压测来决定

    3、框架设计的角度

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

    4、性能

    WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。

    Spring webflux 有一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现非常好。使用非阻塞API。 Websockets得到支持,并且由于它与Spring紧密集成,所以将会是一个更好的 开发 体验。

    Zuul 1.x,是一个基于阻塞io的API Gateway。Zuul已经发布了Zuul 2.x,基于Netty,也是非阻塞的,支持长连接,但Spring Cloud暂时还没有整合计划

  • 相关阅读:
    Jackson 解析 JSON 详细教程
    Revit SDK:CreateFillPattern 创建填充样式
    城市消防无人机控制系统的设计
    JQuery
    【毕业设计】基于php+mysql+apache的课程网站管理系统设计与实现(毕业论文+程序源码)——课程网站管理系统
    第四章 互联网信息收集
    团建游戏---蜘蛛网
    【Node.js操作SQLite指南】
    求负反馈电路的电压增益
    阿里巴巴政委体系 & 华为数字化转型之道
  • 原文地址:https://blog.csdn.net/MinggeQingchun/article/details/125335942