SpringCloud中路由gateway实操

路由Gateway

是什么

Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能,例如:熔断、限流、重试等。

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

干什么

 反向代理
 鉴权
 流量控制
 熔断
 日志监控

功能
路由转发+执行过滤器链

怎么干

可以参考子父工程可以参考 上期Nacos结合使用

https://blog.csdn.net/qq_56602812/article/details/126214010?spm=1001.2014.3001.5501

上期Nacos配置中心

1.与配置中心Nacos结合

1.pom文件

<!--新增gateway,不需要引入web和actuator模块-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

2.yml配置文件(nacos配置中心的文件)

server:
  port: 8300
spring:
  cloud:
    gateway:
      routes:
       - id: employee_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名
         uri: http://localhost:8100   #匹配后提供服务的路由地址
         predicates:
           - Path=/employees/employee/**   #断言,路径相匹配的进行路由
           

yml文件第二中写法(可以实现负载均衡)

server:
  port: 8300
spring:
  cloud: 
    gateway:
      discovery:
        locator:
          enabled: true  #开启从注册中心动态创建路由的功能,利用微服务名进行路由      
      routes:
       - id: employee_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名
         uri: http://localhost:8100   #匹配后提供服务的路由地址
         predicates:
           - Path=/employees/employee/**   #断言,路径相匹配的进行路由
 

注意:
需要注意的是uri的协议为lb,表示启用Gateway的负载均衡功能。
lb://serviceName是spring cloud gateway在微服务中自动为我们创建的负载均衡uri

代理路径localhost:8100的服务
3.加上启动注解(nacos配置中心)
@EnableDiscoveryClient //nacos
4.启动项目
1.启动8100端口项目
在这里插入图片描述

2.启动路由代理8100的项目
在这里插入图片描述

2.Predicate的使用

是什么
Predicate就是为了实现一组匹配规则,让请求过来找到对应的Route进行处理。就是给路由访问提供一些访问规则。

配合yml中使用

predicates:
            - Path=/employees/lb/**   #断言,路径相匹配的进行路由
            #- After=2022-03-08T10:59:34.102+08:00[Asia/Shanghai]
            #- Cookie=username,zhangshuai #并且Cookie是username=zhangshuai才能访问
            #- Header=X-Request-Id, \d+ #请求头中要有X-Request-Id属性并且值为整数的正则表达式
            #- Host=**.hand.com
            #- Method=GET
            #- Query=username, \d+ #要有参数名称并且是正整数才能路由

3.Filter的使用

是什么 :
路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。

3.1自定义过滤器

干什么
全局日志记录
统一网关鉴权

自定义全局GlobalFilter
两个主要接口介绍 主要实现下面接口
impiemerts GlobalFilter ,Ordered
实现过滤方法

@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {
    /**
     * 自定义实现过滤规则的方法
     *
     * @param exchange
     * @param chain
     * @author PC 2022-08-07 23:20
     * @return reactor.core.publisher.Mono<java.lang.Void>
     */
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
      log.info("------welcom MyLogGateWayFilter"+new Date());
        String token = exchange.getRequest().getQueryParams().getFirst("token");
        if(StringUtils.isEmpty(token)){
            log.info("用户名为Null非法用户(---)");
           return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }

3.1实现效果

路径没有拼接token规则
在这里插入图片描述
控制台
在这里插入图片描述
路径拼接token 符合要求放行
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值