• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

网关Gateway

武飞扬头像
辣椒太少不适合吃
帮助1

网关旨在为微服务架构提供一种简答有效的同意的API入口,负载服务请求路由、组合及协议转换,并且基于Filter链的方式提供了权限认证,监控,限流等功能。

网关优点:1.性能强 2.功能强大:内置了很多实用的功能,如:转发 监控 限流等 3.容易扩展

网关缺点:依赖Netty与WebFlux(spring5.0),学习成本高 ,需要spring boot2.0及以上的版本次才支持

网关需要进行的配置:

第一步:添加相关依赖。

注意:添加完这个依赖不能添加web依赖,会起冲突

  1.  
    <!-- 配置网关依赖,基于Netty去写的。加了这个依赖不能加web依赖-->
  2.  
    <dependency>
  3.  
    <groupId>org.springframework.cloud</groupId>
  4.  
    <artifactId>spring-cloud-starter-gateway</artifactId>
  5.  
    </dependency>
  6.  
    <!-- 服务发现依赖-->
  7.  
    <dependency>
  8.  
    <groupId>com.alibaba.cloud</groupId>
  9.  
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  10.  
    </dependency>
  11.  
    <!-- 限流依赖-->
  12.  
    <dependency>
  13.  
    <groupId>com.alibaba.cloud</groupId>
  14.  
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  15.  
    </dependency>
  16.  
    <!-- 在限流上显示网关依赖-->
  17.  
    <dependency>
  18.  
    <groupId>com.alibaba.cloud</groupId>
  19.  
    <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
  20.  
    </dependency>
学新通

第二步:添加application.yml相关配置:

其中:路由是gateway最基本的组件之一,表示一个具体的路由信息载体

id:路由表示符,路由名称

uri:路由执行的目的地,客户端请求最终被转发到的微服务

predicate:断言 谓词  条件判断,当返回的都是true时才会执行路由

filter:  过滤器,用于修改请求和响应信息

lb:指从nacos中按照名称获取微服务,并遵循负载均衡策略,同时简易开发阶段打开gateway日志

  1.  
    server:
  2.  
    port: 9000
  3.  
    spring:
  4.  
    application:
  5.  
    name: sso-gateway #通过网关进行访问。
  6.  
    cloud:
  7.  
    nacos:
  8.  
    discovery: #服务注册端口
  9.  
    server-addr: localhost:8848
  10.  
    config: #配置中心端口
  11.  
    server-addr: localhost:8848
  12.  
    file-extension: yml #配置文件后缀名
  13.  
    sentinel: #配置限流端口
  14.  
    transport:
  15.  
    dashboard: localhost:8180
  16.  
    eager: true #开启通过服务注册中心的serbiceId创建路由
  17.  
    gateway:
  18.  
    routes: #路由
  19.  
    - id: router01 #资源服务路由名称
  20.  
    uri: lb://sso-resource #lb表示负载均衡 后面是需要进行负载均衡的服务名
  21.  
    predicates: #匹配规则
  22.  
    - Path=/sso/resource/** #设置访问路径 以及规则
  23.  
    filters:
  24.  
    - StripPrefix=1
  25.  
    - id: router02 #认证服务路由名称
  26.  
    uri: lb://sso-auth #lb表示负载均衡 后面是需要进行负载均衡的服务名
  27.  
    predicates: #谓词对象,可以定义多个谓词逻辑
  28.  
    - Path=/sso/oauth/**
  29.  
    filters:
  30.  
    - StripPrefix=1 #去掉第一层路径
  31.  
    globalcors: #跨域配置(写到配置文件的好处是可以将其配置写到配置中心)
  32.  
    corsConfigurations: #所有跨域配置只是针对ajax请求,因为ajax请求不支持跨域
  33.  
    '[/**]':
  34.  
    allowedOrigins: "*"
  35.  
    allowedHeaders: "*"
  36.  
    allowedMethods: "*"
  37.  
    allowCredentials: true
  38.  
    logging: #日志
  39.  
    level:
  40.  
    org.springframework.cloud.gateway: debug
  41.  
     
学新通

 第三步:当你完成配置后 启动网关项目,检查sentinel控制台网关菜单。启动时,需要添加jvm参数:

-Dcsp.sentinel.app.type=1

 学新通

 学新通

 基于请求属性限流

学新通

 学新通

 自定义API维度限流

自定义API分组,是一种更细的限流规则定义,它允许我们利用sentinel提供的API,将请求路径进行分组,然后在组上设置限流规则即可

学新通

 学新通

 定义流控网关返回值:

  1.  
    @Configuration
  2.  
    public class GatewayConfig {
  3.  
    public GatewayConfig(){
  4.  
    GatewayCallbackManager.setBlockHandler( new BlockRequestHandler() {
  5.  
    @Override
  6.  
    public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
  7.  
    Map<String,Object> map=new HashMap<>();
  8.  
    map.put("state",429);
  9.  
    map.put("message","two many request");
  10.  
    String jsonStr=JSON.toJSONString(map);
  11.  
    return ServerResponse.ok().body(Mono.just(jsonStr),String.class);
  12.  
    }
  13.  
    });
  14.  
    }
  15.  
    }
学新通

 其中,Mono 是一个发出(emit)0-1个元素的Publisher对象。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfjagfi
系列文章
更多 icon
同类精品
更多 icon
继续加载