Springcloud GateWay网关配置过程图解

一般为了不暴露自己的端口信息等,会选择架构一个网关在前面进行阻挡,起到保护的作用。附上一张工作示列图。

1.配置网关9527

gateway作为网关需要和其他的应用一样需要注册进eureka中进行管理,先创建应用gateway9527

pom文件,关键是gateway依赖

<dependencies>
    <dependency>
      <groupId>com.bai</groupId>
      <artifactId>cloud-api-common</artifactId>
      <version>${project.version}</version>
    </dependency>
    <!--gateway-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!--eureka client-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!--热部署-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

yml文件配置

server:
 port: 9527

spring:
 application:
  name: cloud-gateway
 cloud:
  gateway:
   discovery:
    locator:
     enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由
   routes:
    - id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名
     #匹配后提供服务的路由地址
     #uri: http://localhost:8001
     uri: lb://cloud-payment-service
     predicates:
      - Path=/payment/get/** # 断言,路径相匹配的进行路由

    - id: payment_route2
     #uri: http://localhost:8001
     uri: lb://cloud-payment-service
     predicates:
      - Path=/payment/sp/** #断言,路径相匹配的进行路由
eureka:
 instance:
  hostname: cloud-gateway-service
 client:
  fetch-registry: true
  register-with-eureka: true
  service-url:
   defaultZone: http://eureka7001.com:7001/eureka/

主启动类正常配置

@SpringBootApplication
@EnableEurekaClient
public class GateWay9527 {
  public static void main(String[] args) {
    SpringApplication.run(GateWay9527.class,args);
  }
}

2.配置路由两种方式

1)yml文件格式(推荐)

spring:
 application:
  name: cloud-gateway
 cloud:
  gateway:
   discovery:
    locator:
     enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由
   routes:
    - id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名
     #匹配后提供服务的路由地址
     #uri: http://localhost:8001
     uri: lb://cloud-payment-service
     predicates:
      - Path=/payment/get/** # 断言,路径相匹配的进行路由

    - id: payment_route2
     #uri: http://localhost:8001
     uri: lb://cloud-payment-service
     predicates:
      - Path=/payment/sp/** #断言,路径相匹配的进行路由
      - After=2020-11-09T11:09:52.794+08:00[Asia/Shanghai]
      - Cookie=username,bai  #带Cookie,并且username的值为bai
#      - Header=X-Request-Id,\d+ #请求头要有 X-Request-Id属性并且值为整数的正则表达式

2)通过config配置类实现

@Configuration
public class RouteConfig {
  @Bean
  public RouteLocator customerRoute(RouteLocatorBuilder builder){
    RouteLocatorBuilder.Builder routes = builder.routes();
     routes.route("payment_route1",
         r -> r.path("/guonei").uri("http://news.baidu.com/guonei")).build();
    return routes.build();
  }
  @Bean
  public RouteLocator bokeRoute(RouteLocatorBuilder builder){
    RouteLocatorBuilder.Builder routes = builder.routes();
    routes.route("payment_route2",r->r.path("/boke").uri("http://www.cnblogs.com/lin530/")).build();
    return routes.build();
  }
}

3.断言(Predicate)

相当于多种限制,只有通过验证才能够访问到对应的方法

- id: payment_route2
     #uri: http://localhost:8001
     uri: lb://cloud-payment-service
     predicates:
      - Path=/payment/sp/** #断言,路径相匹配的进行路由
      - After=2020-11-09T11:09:52.794+08:00[Asia/Shanghai]
      - Cookie=username,bai  #带Cookie,并且username的值为bai
#      - Header=X-Request-Id,\d+ #请求头要有 X-Request-Id属性并且值为整数的正则表达式

不同的方法可以配置不同的断言,此处的断言需要满足路径对,after时间后,cookie带上正确的用户名才可以访问到,用cmd测试

其他还有很多断言,请对照文档自行研究

4)过滤(filter)

对访问加上限制,通过验证才可以访问

新建过滤配置类

@Component
@Slf4j
public class GatewayGlobalFilter implements GlobalFilter, Ordered {
  @Override
  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    log.info("***time is :"+new Date());
    String uname = exchange.getRequest().getQueryParams().getFirst("uname");
    if(uname==null){

      log.info("没有用户名,出现错误:o(╥﹏╥)o");
      exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
      return exchange.getResponse().setComplete();
    }
    return chain.filter(exchange);
  }

  /*
  设置过滤器优先级,越小优先级越大
   */
  @Override
  public int getOrder() {
    return 0;
  }
}

访问方式带上参数,

本篇所有代码均在GitHub:

https://github.com/MaTsukun/springcloud2020

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解SpringCloudGateway内存泄漏问题

    SpringCloudGateway内存泄漏问题 项目完善差不多,在进入压力测试阶段期间,发现了gateway有内存泄漏问题,问题发现的起因是,当时启动一台gateway,一台对应的下游应用服务,在压力测试期间,发现特别不稳定,并发量时高时低,而且会有施压机卡住的现象,然后找到容器对应的宿主机,并使用container stats命令观察内存,经过观察发现,压力测试时内存会暴涨,并由于超过限制最大内存导致容器挂掉(这里由于用的swarm所以会自动选择节点重启)最终发现由于之前测试服务器配置低,所

  • Spring Cloud Gateway重试机制原理解析

    重试,我相信大家并不陌生.在我们调用Http接口的时候,总会因为某种原因调用失败,这个时候我们可以通过重试的方式,来重新请求接口. 生活中这样的事例很多,比如打电话,对方正在通话中啊,信号不好啊等等原因,你总会打不通,当你第一次没打通之后,你会打第二次,第三次-第四次就通了. 重试也要注意应用场景,读数据的接口比较适合重试的场景,写数据的接口就需要注意接口的幂等性了.还有就是重试次数如果太多的话会导致请求量加倍,给后端造成更大的压力,设置合理的重试机制才是最关键的. 今天我们来简单的了解下Spr

  • spring cloud gateway请求跨域问题解决方案

    这篇文章主要介绍了spring cloud gateway请求跨域问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 @Configuration public class CorsConfig implements GlobalFilter, Ordered { private static final String ALL = "*"; private static final String MAX_AGE =

  • 基于Nacos实现Spring Cloud Gateway实现动态路由的方法

    简介 该文档主要介绍以Nacos为配置中心,实现Spring Cloud GateWay 实现动态路由的功能.Spring Cloud Gateway启动时候,就将路由配置和规则加载到内存里,无法做到不重启网关就可以动态的对应路由的配置和规则进行增加,修改和删除.通过nacos的配置下发的功能可以实现在不重启网关的情况下,实现动态路由. 集成 Spring Cloud GateWay集成 spring-cloud-starter-gateway:路由转发.请求过滤(权限校验.限流以及监控等) s

  • Spring Cloud Gateway + Nacos 实现动态路由

    本节开始介绍 SpringCloud Gateway 中动态路由的实现方法,包括: Nacos 集成动态路由配置,更新配置文件即自动更新路由 MySQL + 二级缓存实现,主要基于 Gateway 的一些特性进行重写,实现路由信息的自动更新 这篇文章主要介绍第一种方式:将配置文件放到 Nacos 进行托管,网关服务通过引入 Nacos 而自动更新路由配置信息.实现较为简单. 本节代码在:https://github.com/laolunsi/spring-boot-examples,参考例 23

  • Spring Cloud Gateway不同频率限流的解决方案(每分钟,每小时,每天)

    SpringCloud Gateway 简介 SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式. SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuu

  • spring cloud gateway整合sentinel实现网关限流

    这篇文章主要介绍了spring cloud gateway整合sentinel实现网关限流,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 说明: sentinel可以作为各微服务的限流,也可以作为gateway网关的限流组件. spring cloud gateway有限流功能,但此处用sentinel来作为替待. 说明:sentinel流控可以放在gateway网关端,也可以放在各微服务端. 1,以父工程为基础,创建子工程 2,添加pom依赖

  • Spring Cloud Gateway全局通用异常处理的实现

    为什么需要全局异常处理 在传统 Spring Boot 应用中, 我们 @ControllerAdvice 来处理全局的异常,进行统一包装返回 // 摘至 spring cloud alibaba console 模块处理 @ControllerAdvice public class ConsoleExceptionHandler { @ExceptionHandler(AccessException.class) private ResponseEntity<String> handleAc

  • Springcloud GateWay网关配置过程图解

    一般为了不暴露自己的端口信息等,会选择架构一个网关在前面进行阻挡,起到保护的作用.附上一张工作示列图. 1.配置网关9527 gateway作为网关需要和其他的应用一样需要注册进eureka中进行管理,先创建应用gateway9527 pom文件,关键是gateway依赖 <dependencies> <dependency> <groupId>com.bai</groupId> <artifactId>cloud-api-common</

  • SpringCloud GateWay网关示例代码详解

    目录 一.网关基本概念 1.API网关介绍 2.Spring Cloud Gateway 3.Spring Cloud Gateway核心概念 一.网关基本概念 1.API网关介绍 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:(1)客户端会多次请求不同的微服务,增加了客户端的复杂性.(2)存在跨域请求,在一定场景下处理相对复杂.(3)认证复杂,每个服务都

  • SpringCloud Gateway网关功能介绍与使用

    目录 一.什么是API网关 二.基本使用 三.谓词 四.过滤器-Filter 五.使用Gateway实现限流 六.使用Gateway实现服务降级 七.自定义全局过滤器 八.自定义路由过滤器 一.什么是API网关 API网关作用就是把各个服务对外提供的API汇聚起来,让外界看起来是一个统一的接口.同时也可在网关中提供额外的功能. 总结:网关就是所有项目的一个统一入口. 二.基本使用 1.准备Eureka注册中心 2.准备一个微服务工程 3.搭建Gateway网关微服务 (1)导入依赖 <depen

  • MySql 5.7.17压缩包免安装的配置过程图解

    MySQL数据库管理软件有两种版本,一种是企业版,一种是社区版,其中,前者是收费的,如果是个人使用的,社区版足矣.下载mysql-5.7.17-winx64.zip,并将之解压于自己选定的目录后,如图1,会在文件夹里看到配置文件my-default.ini,此时,需将其复制,并粘贴进bin文件夹里,并将其重新命名为my.ini,如图2.至此准备工作完成,下面将详说具体的配置过程. 工具/原料 (1)电脑:Lenovo B460e:  (2)操作系统:windows 7,64位:  (3)mysq

  • SpringCloud Gateway 路由配置定位原理分析

    环境:springcloud Hoxton.SR11 本节主要了解系统中的谓词与配置的路由信息是如何进行初始化关联生成路由对象的.每个谓词工厂中的Config对象又是如何被解析配置的. 所有的谓词工厂中的Config中属性值是如何被配置的. 在SpringCloud Gateway中的所有谓词工厂如下: 命名规则:XxxRoutePredicateFactory.所有的这些谓词工厂都是如下的继承关系 public class MethodRoutePredicateFactory extends

  • springcloud gateway网关服务启动报错的解决

    目录 gateway网关服务启动报错 集成gateway 报错 原因分析 gateway网关运行时报错问题(版本问题) 父级中的版本问题 原因:父项目中的jdk版本问题 解决方法 gateway网关服务启动报错 集成gateway springcloud网关集成gateway服务 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter

  • Windows10 Java环境变量配置过程图解

    准备过程: 在电脑桌面 右键点击 "此电脑"的"属性"选项 选择"高级系统设置"选项 点击下面的"环境变量"选项 配置过程: 点击"系统变量"下面的"新建"选项 在"变量名"处填上"Java_Home" "变量值"为JDK安装路径,笔者的路径是"D:\jdk1.8" 点击"确定"选项 选中

  • Spring整合junit的配置过程图解

    配置步骤: 1.导入Spring整合Junit的jar(坐标): <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.0.2.RELEASE</version> <scope>test</scope> </dependency> 2.使用Ju

  • SpringBoot Druid配置过程图解

    Druid是阿里开源的一个JDBC应用组件, 其包括三部分: DruidDriver: 代理Driver,能够提供基于Filter-Chain模式的插件体系. DruidDataSource: 高效可管理的数据库连接池. SQLParser: 实用的SQL语法分析 通过Druid连接池中间件, 我们可以实现: 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助. 替换传统的DBCP和C3P0连接池中

  • PyCharm MySQL可视化Database配置过程图解

    在进行数据库相关的模块学习时,通常有人推荐使用Navicat,确实强大方便,可惜是收费的.这里推荐一个在社区版PyCharm里面直接可视化访问数据库的方法,开源免费. 在社区版的PyCharm中,可以通过下载Database Navigator的插件,实现可视化.下面是详细步骤: 1. 在菜单file中找到Settings,如下 2. 进入Plugins,搜索'Database Navigator',如下图,然后安装. 3. 装好后,菜单栏会多出一个菜单'DB Navigator',如下: 4.

随机推荐