青柠开车Spring Cloud(六) —— Spring Cloud Gateway与zuul使用对比

电玩女神 2023-06-28 11:30 100阅读 0赞

青柠开车Spring cloud(一) —— 生态系统以及在企业项目中的基础架构图 (1-7),有时间可以看看

format_png

项目源码github地址

  • 补充
  • Gateway简介
  • 快速入门

    • Gateway 项目基本配置
    • 加入gateway网关配置
    • 集成Eureka

补充

  • 使用网关前项目架构
    backendforfrontend
  • 使用网关后项目架构
    apigateway

Gateway简介

官方文档、官方demo

spring-cloud-Gatewayspring-cloud的一个子项目。而zuul则是netflix公司的项目,只是spring将zuul集成在spring-cloud中使用而已。
还有一种说法是因为zuul2连续跳票和zuul1的性能表现不是很理想,所以催生了spring孵化Gateway项目。

快速入门

spring-cloud创建spring-cloud-gateway子模块项目

Gateway 项目基本配置

  • pom.xml中加入jar包



    org.springframework.cloud
    spring-cloud-starter-gateway



  • application.properties配置

    server.port= 8562
    spring.application.name=gateway

    日志打印的级别

    logging.level.org.springframework.cloud.gateway = debug

    集成eureka时开启

    spring.cloud.gateway.discovery.locator.enabled=true

    集成eureka

    eureka.client.serviceUrl.defaultZone= http://localhost:8761/eureka/

  • springboot启动类

    /**

    • @author : R&M www.rmworking.com/blog
    • 2018/9/18 11:15
    • spring-cloud
    • org.qnloft.gateway
      */
      //@EnableEurekaClient
      @SpringBootApplication
      public class GateWayApplication {

      public static void main(String[] args) throws Exception {
      SpringApplication.run(GateWayApplication.class, args);
      }
      }

加入gateway网关配置

看完上面的内容,小伙伴们应该发现,这和普通的springboot项目有毛区别啊~~~,别着急,让我带领大家来揭开gateway的面纱!

spring-cloud-gateway有两种配置方式,一种是在application.yml中配置,一种是使用@Bean对象注入。(注意:二者选其一)

  • application.yml方式

    spring:
    cloud:

    1. gateway:
    2. routes:
    3. - id: WEB
    4. uri: http://127.0.0.1:8661
    5. predicates:
    6. - Path=/web/{segment}
    7. filters:
    8. - SetPath=/{segment}
  • @Bean对象注入配置方式

GateWayApplication.java中加入如下内容:

  1. @Bean
  2. public RouteLocator routeLocator(RouteLocatorBuilder builder) {
  3. return builder.routes()
  4. .route("WEB", r -> r.path("/web/{segment}")
  5. .filters(f -> f.setPath("/{segment}"))
  6. .uri("http://127.0.0.1:8661"))
  7. .build();
  8. }

简要说明:

  • id:路由的id,参数配置不要重复,如不配置,gateway会使用生成一个uuid代替。
  • uri:路由的目标地址。注意:uri地址后面不要加 “ / “
  • Path:配置路由的路径。比如:/web/{segment}则表示当访问http://127.0.0.1:8562/web/**时候路由的指定的uri上面
  • SetPath:在发起请求时,在路由请求路径后面加上web/后面的内容。如果不配置,将无法路由地址后缀/web/index,只能路由/web

测试:现在我们启动spring-web项目和spring-cloud-gateway项目,浏览器访问:http://127.0.0.1:8562/web/index ,当出现和 http://127.0.0.1:8661/index 相同的内容既证明网关配置成功。

关于@Bean方式更多配置请参见:这里

集成Eureka

将项目的注释部分解注,即可成功集成。

发表评论

表情:
评论列表 (有 0 条评论,100人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring Cloud Zuul

    基于Spring的微服务结点在能力上没有高低贵贱之分,但是在角色上会分为边缘服务和内部服务两部分。内部服务顾名思义是为对内暴露服务的结点,供架构内部来调用;边缘服务是对外部网络