十五、Gateway网关

目录

Zuul网关和gateway网关的区别:

Gateway路由配置

1、新建服务网关项目,并在项目pom文件中引入gateway网关依赖

2、在application.yml配置gateway

3、如果不用配置的方式配置gateway路由,还可以通过代码的形式配置

4、启动网关服务,访问localhost:8081/api/goods/goodsInfo

5、服务提供者server-goods

Gateway熔断降级

1、在网关服务项目中引入Hystrix依赖

2、在网关服务项目application.yml中配置以下内容

3、在网关服务项目resource下添加application-hystrix.yml文件配置hystrix信息

4、在网关服务项目中新增一个Controller,配置fallbackUri中的降级方法

5、启动网关服务,再次访问localhost:8081/api/goods/goodsInfo

 6、服务提供者server-goods

Gateway限流

1、在网关服务项目中引入redis-reactive依赖

2、在服务网关项目中修改application.yml激活application-limit.yml的配置

3、在服务网关项目中添加application-limit.yml配置限流条件

4、在网关服务项目中添加名为userKeyResolver的Bean

5、本地启动redis服务,访问localhost:8081/api/goods/goodsInfo?user="张三"


Zuul网关和gateway网关的区别:

Zuul是netflix在2013年开源的网关组件,大规模应用在Netflix的生产环境中,经受了实践考验。它可以与Eureka、Ribbon、Hystrix等组件搭配使用,实现路由转发、负载均衡、熔断等功能。Zuul的核心是一系列过滤器,过滤器简单易于扩展。Zuul基于Servlet构建,使用的是阻塞的IO,引入了线程池来处理请求。每个请求都需要独立的线程来处理,从线程池中取出一个工作线程执行,下游微服务返回响应之前这个工作线程之前一直是阻塞的。

SpringCloud Gateway是SpringCloud的一个全新项目,该项目是基于Spring5.0,SpringBoot2.0和Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。

SpringCloud Gateway作为SpringCloud生态系统的网关,目标是代替Zuul,它是基于Webflux框架实现的,而Webflux框架底层则是使用了高性能的Reactor模式通信框架Netty。

SpringCloud Gateway目标不仅提供统一的路由方式,而且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/指标,限流等。

Gateway路由配置

1、新建服务网关项目,并在项目pom文件中引入gateway网关依赖

<!-- 引入gateway网关-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

2、在application.yml配置gateway

Gateway配置各字段含义:

id : 我们自定义的路由ID,保持唯一(“-”与id之间有空格)

uri: 目标服务地址,(lb://服务名)lb为load balance负载均衡的意思

predicates: 路由条件,Predicates接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将Predicates组合成其他复杂的逻辑(如:与、或、非)

server:
  port: 8081

spring:
  application:
    name: server-gateway
#配置gateway路由规则
  cloud:
    gateway:
      routes:
        - id: route1 #route ID 自定义
          uri: lb://server-goods #目标服务地址  lb://服务名称
#          uri: http://localhost:8041 #直接指定服务地址
          predicates:  #路由条件
            - Path=/api/goods/**

eureka:
  instance:
  # 使用ip地址作为host,而不是机器号/电脑名称
    prefer-ip-address: true
#    Eureka客户端向注册中心发送心跳的时间间隔是1s,默认是30s
    lease-renewal-interval-in-seconds: 1
#    Eureka服务端在收到一次心跳后等待时间上限是2s,默认是90s
#    超时将剔出该微服务,也可以在Eureka服务端进行设置
    lease-expiration-duration-in-seconds: 2
  client:
    service-url:
      defaultZone: http://localhost:8060/eureka/

3、如果不用配置的方式配置gateway路由,还可以通过代码的形式配置

代码方式项目中用得比较少

 @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder){
        //使用分布的形式创建返回RouteLocator
        RouteLocatorBuilder.Builder routes = builder.routes();
        //指定具体的服务地址
        routes.route("route2",r->{
            return r.path("/api/goods/**").uri("http://localhost:8041");
        });
        //使用lb负载均衡配置服务地址
//        routes.route("route3",r->{
//            return r.path("/api/goods/**").uri("lb://server-goods");
//        });

        return routes.build();

          //使用链式编程一步到位
//        return builder.routes()
//                .route("route2",r->r.path("/api/goods/**")
//                        .uri("lb://server-goods"))
//                .build();
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值