ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

微服务之网关

2021-09-08 20:34:13  阅读:240  来源: 互联网

标签:网关 服务 exchange nacos token 过滤器 Gateway


Gateway,是系统的唯一对外的⼊入⼝口,介于客户端和服务器端之间的中间层,处理理非业务功能 提供路由请求、鉴权、监控、缓存、限流等功能

               

 SpringCloud Gateway

 基于Reactor+WebFlux

网关的使用:

网关是一个项目,需要新建一个模块module

1、添加依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

2、连接到nacos负载均衡上拉取目标服务的信息

      可以解决负载均衡问题和微服务地址写死的问题。

在网关中添加完nacos依赖后,启动类开启client

@EnableDiscoveryClient

3、配置文件

server:
  port: 8888

spring:
  application:
    name: api-gateway
    
  cloud:
    nacod:
      discovery:
        service-addr: ip:port
        
    gateway:
      routes: #数组形式
        - id: order-service #路由唯⼀标识,一般写服务名称
        uri: lb://xdclass-order-service #从nacos进行转发,lb是负载均衡的意思
        order: 1 #优先级,数字越小优先级越高
        predicates: #断言 配置哪个路径才转发
          - Path=/order-server/**
        filters: #过滤器,请求在传递过程中通过滤器修改
          - StripPrefix=1 #去掉第一层前缀
      discovery:
        locator:
          enabled: true  # 开启网关拉取nacos的服务

网关的交互过程

交互过程:

        客户端向Spring Cloud Gateway发出请求
        如果网关处理程序映射确定请求与路由匹配
        则将其发送到网关Web处理理程序
        通过特定过滤器链运行,前置处理-后置处理

 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性实现了了各种路由匹配规则

断言的种类:Path、Query、Method、Header ------配置中predicates设置断言

利用网关中的内置断言实现接口的定时下线

在配置中设置before的值,

配置完成后,超过这个时间就不能访问这个接口了

 springcloud的过滤器

局部过滤器GatewayFilter:应用在某个路由上,每个过滤器工厂都对应一个实现类,并且这些类的名称必须以GatewayFilterFactory 结尾
全局过滤器:作用全部路由上.

 利用网关实现全局过滤器实现用户的鉴权

网关的第一职责是转发,不要加太多业务逻辑,否则会影响性能。

业务逻辑可以放在对应的微服务中

@Component
public class UserGlobalFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 业务逻辑
        String token = exchange.getRequest().getHeaders().getFirst("token");
        //TODO 根据业务开发对应的鉴权规则
        if(StringUtils.isEmpty(token)){  // token为空的时候
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        // 不为空的时候,继续往下执行
        return chain.filter(exchange);
    }

    // 过滤器的优先级,数字越小,优先级越高
    @Override
    public int getOrder() {
        return 0;
    }
}

 

标签:网关,服务,exchange,nacos,token,过滤器,Gateway
来源: https://blog.csdn.net/weixin_45063957/article/details/120168375

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有