gateway网关技术(一):快速入门

gateway网关技术(一):快速入门

目录

在这里插入图片描述

是什么、为什么出现:

单体架构的时候,不管是增加逻辑,还是修改逻辑,我们只需要对一个项目进行修改即可。现在多了两三个项目,比如我们想在两三个项目上都要增加一个访问鉴权,那么我们就得该两三个项目,比较麻烦。

为了解决上面的问题,微服务引入了 网关 的概念。网关作为系统的统一入口,提供内部服务的路由中转,给客户端提供统一的服务,可以实现一些和业务没有耦合的公用逻辑。

他还可以实现:路由:中转;统一鉴权、 统一处理跨域、 统一业务处理(缓存)、统一日志; 访问控制:不同时间,进行不同的访问; 发布控制;流量染色 统一接口保护 :限制请求、信息脱敏、降级(熔断)、限流 ; 统一文档等等

举个例子,可以理解成火车站的检票口,统一的去检票,统一的去处理的一个入口。

原理图

在这里插入图片描述

快速入门使用

接下来,我们就搭建一个快速入门的项目,让大家更加深入了解到网关,是如何进行使用的

  1. 根据官方提示,首先引入依赖项
    在这里插入图片描述搭建一个springboot项目,然后引入依赖
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
  1. 比如我们现在有一个A项目,用户会访问里面的接口,现在,我希望在访问接口的时候,先通过网关,进行一些逻辑处理,满足条件,网关自动转发到A项目访问这个接口。好的,接下来我们进行实现。

A项目的域名,假设为:http://localhost:8080/
网关的域名,假设为:http://localhost:8090/

在网关项目的配置文件中进行配置,如果路径有/api/**,则跳转到A项目
在这里插入图片描述

server:
  port: 8090
#设置日志
logging:
  level:
    org:
      springframework:
        cloud:
          gateway: trace
spring:
  cloud:
    gateway:
      routes:
        - id: after_routeE
          uri: http://localhost:8080/
          predicates: # http://localhost:8090/api/name/getname能直接匹配。
            - Path=/api/**

ok,用户访问网关,就能中转到我们的项目A
在这里插入图片描述

如果你还有项目B,可以配置多个路由,多个路径,如下

spring:
  cloud:
    gateway:
      routes:
        - id: after_routeE
          uri: http://localhost:8080/
          predicates: # http://localhost:8090/api/name/getname能直接匹配。
            - Path=/api/**
        - id: after_routeB
          uri: http://localhost:8070/
          predicates: # http://localhost:8090/api/name/getname能直接匹配。
            - Path=/api1/**
  1. 在网关进行统一的业务逻辑处理。
    在这里插入图片描述可以对所有的路由进行统一处理。只需要implements GlobalFilter, Ordered

@Component
@Slf4j
public class CustomGlobalFilter implements GlobalFilter, Ordered {

    //1. 用户发送请求到API网关
    /**
     * @param exchange 用户的请求信息都在里面
     * @param chain 用于跳转,停止等。
     * @return
     */
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
      	//对请求进行拦截,比如
      	HttpHeaders headers = request.getHeaders();
			String accessKey = headers.getFirst("accessKey");
			if (!"123456".equals(accessKey)) {
            throw new RuntimeException("没有权限");
        }
        Mono<Void> filter = chain.filter(exchange);
        return filter;
    }
 		/**
     * 可以设置过滤器的执行顺序
     * @return
     */
    @Override
    public int getOrder() {
        return -1;
    }

}

好了,快速入门就到这里,后续还有更加精彩的内容,大家多多关注。谢谢~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值