Springcloud-alibaba整合gateway

Springcloud-alibaba整合gateway

每天多学一点点~
话不多说,这就开始吧…

文章目录

1.前言

之前学习了nacos,sentinel,并对sentinel进行了持久化改造。现在轮到了gateway了

gateway官网

2. gateWay简介

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul 网关。网关作为流量的,在微服务系统中有着非常作用。据说性能是第一代网关 zuul的1.5倍。(基于Netty,WebFlux)。
:由于不是Sevlet容器,所以他不能打成war包, 只支持SpringBoot2.X不 支持1.x

网关作用:
路由转发、权限校验、限流控制等作用

没有网关:
在这里插入图片描述

使用网关:
在这里插入图片描述

2. 搭建SpringCloudGateWay

  1. 添加依赖

       <!--gateway依赖 -->
       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--nacos依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    
  2. yml文件

    #规划GateWay的服务端口
    server:
    port: 8888
    ##规划gateWay注册到到nacos上的服务应用名称
    spring:
    application:
    name: api-gateway
    cloud:
    nacos:
    discovery:
    #gateway工程注册到nacos上的地址
    server-addr: localhost:8848
    gateway:
    discovery:
    locator:
    #开启gateway从nacos上获取服务列表
    enabled: false
    profiles:
    active: xxxxx # 具体的gateway配置
    #开启acutor端点
    management:
    endpoints:
    web:
    exposure:
    include: ‘*’
    endpoint:
    health:
    #打开端点详情
    show-details: always

  3. 写注解

    @SpringBootApplication
    @EnableDiscoveryClient
    public class GatewayDemo{

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

    }

gateway没有注解。。。

3. gateway转发规则

在这里插入图片描述

4. GateWay的核心概念

  1. 路由
    网关的基本构建模块,它是由ID、目标URl、断言集合和过滤器集合定义, 如果集合断言为真,则匹配路由。
  2. Predicate(断言)
    这是java 8的一个函数式接口predicate,可以用于lambda表 达式和方法引用,输入类型是:Spring Framework ServerWebExchange,允许开发人员匹配来自HTTP请求的任何内容,例如请求头headers和参数paramers
  3. Filter(过滤器)
    这些是使用特定工厂构建的Spring Framework GatewayFilter 实例,这里可以在发送下游请求之前或之后修改请求和响应

5. 路由断言工厂

在这里插入图片描述

类名必须以 RoutePredicateFactory 结尾,下面有个例子

具体请看gateway官网,都有

6. 自定义谓词工厂

这里以时间举个例子

  1. 书写一个配置类,用于接受配置

    /**

    • Created by zjq on 2020/06/05.
      */
      @Data
      public class MyTimeBetweenConfig {

      private LocalTime startTime;

      private LocalTime endTime;

    }

  2. 写一个自定义谓词工厂,类名必须要以RoutePredicateFactory结尾然后继承AbstractRoutePredicateFactory

    /**

    • Created by zjq on 2020/06/05.
      */
      @Component
      @Slf4j
      public class MyBetweenRoutePredicateFactory extends AbstractRoutePredicateFactory {

      public MyBetweenRoutePredicateFactory() {
      super(MyTimeBetweenConfig.class);
      }

      @Override
      public Predicate apply(MyTimeBetweenConfig config) {

       LocalTime startTime = config.getStartTime();
      
       LocalTime endTime = config.getEndTime();
      
       return new Predicate<ServerWebExchange>(){
           @Override
           public boolean test(ServerWebExchange serverWebExchange) {
               LocalTime now = LocalTime.now();
       		// 判断当前时间是否在在配置的时间范围类
               return now.isAfter(startTime) && now.isBefore(endTime);
           }
       };
      

      }

      public List shortcutFieldOrder() {
      return Arrays.asList(“startTime”, “endTime”);
      }

    }

  3. yml配置

    加上 2 中springcloud搭建gateway的yml文件 spring.profiles.active: 这个文件

    spring:
    cloud:
    gateway:
    routes:
    - id: my-timeBetween #id必须要唯一
    uri: lb://product-center # 任意一个微服务工程
    predicates:
    #当前请求的时间必须在早上7点到 晚上11点 http://localhost:8888/selectProductInfoById/1
    #才会被转发 到http://product-center/selectProductInfoById/1
    - MyTimeBetween=上午7:00,下午11:00

gateway还有很很多,官网都有啦。下面就是sentinel集成gateway了。

7.结语

世上无难事,只怕有心人,每天积累一点点,fighting!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值