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>
  1. 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


  1. 写注解
@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;

}

  1. 写一个自定义谓词工厂,类名必须要以RoutePredicateFactory结尾然后继承AbstractRoutePredicateFactory
/**
 * Created by zjq on 2020/06/05.
 */
@Component
@Slf4j
public class MyBetweenRoutePredicateFactory extends AbstractRoutePredicateFactory<MyTimeBetweenConfig> {

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

    @Override
    public Predicate<ServerWebExchange> 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<String> shortcutFieldOrder() {
        return Arrays.asList("startTime", "endTime");
    }

}
  1. 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!!!

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值