简介

1、是什么
springcloud gateway使用webflux的reactor-netty响应式编程组件,底层使用了Netty通讯框架
2、能干嘛
反向代理、鉴权、流量控制、熔断、日志监控
3、网关对比
gateway对比netflix和zuul来说都要靠谱一点
4、三大核心概念
路由(Route):链路URI和ID构成
断言(predicate):请求参数是否匹配断言条件,匹配则进行路由
过滤(filter):使用过滤器可以在请求被路由前或者路由后进行修改

实战

1、建module
gateway-gateway9527
2、改pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud2020</artifactId><groupId>com.atguigu.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-gateway-gateway9527</artifactId><dependencies><!--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><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --><dependency><groupId>com.atguigu.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></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></project>

3、配yml

server:port: 9527spring:application:name: cloud-gatewaycloud:gateway:discovery:locator:enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由routes:- id: payment_routh #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名#uri: http://localhost:8001          #匹配后提供服务的路由地址uri: lb://cloud-payment-service #匹配后提供服务的路由地址predicates:- Path=/payment/get/**         # 断言,路径相匹配的进行路由- id: payment_routh2 #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名#uri: http://localhost:8001          #匹配后提供服务的路由地址uri: lb://cloud-payment-service #匹配后提供服务的路由地址predicates:- Path=/payment/lb/**         # 断言,路径相匹配的进行路由- After=2020-03-08T10:59:34.102+08:00[Asia/Shanghai]#            - Before=2020-03-08T10:59:34.102+08:00[Asia/Shanghai]#            - Between=2020-03-08T10:59:34.102+08:00[Asia/Shanghai] ,  2020-03-08T10:59:34.102+08:00[Asia/Shanghai]#            curl http://localhost:9527/payment/lb --cookie "username=zzyy"#            - Cookie=username,zzyy   #Cookie=cookieName,正则表达式# 请求头要有X-Request-Id属性并且值为整数的正则表达式 curl http://localhost:9527/payment/lb --cookie "username=zzyy" -H "X-Request-Id:11"
#            - Header=X-Request-Id, \d+
#            - Host=**.atguigu.com  # curl http://localhost:9527/payment/lb -H "Host:afae.atguigu.com"eureka:instance:hostname: cloud-gateway-serviceclient: #服务提供者provider注册进eureka服务列表内service-url:register-with-eureka: truefetch-registry: truedefaultZone: http://eureka7001.com:7001/eureka

4、主启动

@SpringBootApplication
@EnableEurekaClient
public class CloudGateway9527Application {public static void main(String[] args) {SpringApplication.run(CloudGateway9527Application.class, args);System.out.println("启动成功");}
}

5、测试:
添加网关前:http://localhost:8001/payment/get/31
添加网关后:http://localhost:9527/payment/get/31
6、通过9527访问外网地址
config配置

@Configuration
public class GateWayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) {RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();routes.route("path_route_atguigu", r -> r.path("/guoji").uri("http://news.baidu.com/guonei")).build();return routes.build();}
}

通过微服务名进行动态路由

默认情况下Gateway会根据注册中心的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能

predicate配置

1、After

   - After=2020-03-08T10:59:34.102+08:00[Asia/Shanghai]

2、Before

- Before=2020-03-08T10:59:34.102+08:00[Asia/Shanghai]

3、Between

   - Between=2020-03-08T10:59:34.102+08:00[Asia/Shanghai] ,  2020-03-08T10:59:34.102+08:00[Asia/Shanghai]

4、Cookie
需要配置两个参数,cookie name和正则表达式,当匹配上才会执行路由

- Cookie=username,zhangsan

5、Header

-Header=X-request-Id,\d+ #表示请求头要有X-request-Id属性,且还要有值为正数的表达式

6、Host

  - Host=**.dsf.com

7、Method

    - Method=GET

8、Query

  - Query=username, \d+ #要有参数名称并且是正整数才能路由

总结

说白了,Predicate就是为了实现一组匹配规则,让请求过来找到对应的Route进行处理

Filter

1、能干嘛?
用于修改进入的HTTP请求和返回HTTP响应
2、内置的filter配置
spring.cloud.routes.filters:-AddRequestParameter=X-Request-Id,1024.表示属性为X-Request-Id的参数值为1024
3、自定义全局的Global过滤器
作用:全局日志记录、统一网关鉴权等
demo:
需要实现GlobalFilter和Ordered接口

@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("***********come in MyLogGateWayFilter:  " + new Date());// 获取请求参数中的 unameString uname = exchange.getRequest().getQueryParams().getFirst("uname");if (uname == null) {log.info("*******用户名为null,非法用户,o(╥﹏╥)o");exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);return exchange.getResponse().setComplete();}return chain.filter(exchange);}/*** 加载过滤器顺序,数字越小优先级越高** @return*/@Overridepublic int getOrder() {return 0;}
}

3、测试
正确:http://localhost:9527/payment/lb?uname=z3
错误:其他

springcloud整合Gateway相关推荐

  1. springcloud 整合gateway 网关

    gateway网关 目录 gateway网关 一.gataway网关是什么? 1.依赖 2.配置文件 总结 一.gataway网关是什么? Spring Cloud Gateway 是 Spring ...

  2. Java微服务——SpringCloud实战篇2:整合Gateway、Config、Bus

    Java微服务--SpringCloud实战篇2:整合Gateway.Config.Bus 如果小伙伴在阅读下列内容时,对于编写SpringCloud项目是零基础,那么请先阅读小编的另一篇博文:&qu ...

  3. Nacos整合Gateway实现动态路由

    往期回顾 Nacos的安装与配置 Spring Cloud集成Nacos作为注册中心 LoadBalacer集成Nacos实现负载均衡 常见的负载均衡策略分析 Spring Cloud集成Dubbo实 ...

  4. SpringCloud 整合 Dubbo

    目录 1.介绍 2.代码实现 2.1 抽取公共模块 2.2 改造服务提供者 2.3 改造服务消费者 3.启动测试 1.介绍 Dubbo有两种使用方式: 1.基于SOA的思想,将一个单体架构拆分为web ...

  5. SpringCloud 网关 Gateway

    哈喽~大家好,这篇来看看SpringCloud 网关 Gateway.

  6. SpringCloud 整合 Seata

    <分布式事务>https://blog.csdn.net/u011060911/article/details/122210788上面的文章系统介绍了分布式事务相关的理论知识,本文则通过代 ...

  7. 解决SpringCloud的Gateway网关无法访问服务的静态资源

    解决SpringCloud的Gateway网关无法访问服务的静态资源 在重构项目的时候,配置gateway网关后,利用网关地址访问服务,发现服务的静态资源报了404 报错如下: gateway网关配置 ...

  8. SpringCloud - 整合Nacos启动报错Consider defining a bean of type IClientConfig

    SpringCloud - 整合Nacos启动报错Consider defining a bean of type IClientConfig 前言 一. 尝试解决Bug的几种不合适方案 1.1 添加 ...

  9. SpringCloud整合TX-LCN5.0.2使用LCN模式实现分布式事务

    一.TM配置 pom.xml文件中添加依赖: <dependency><groupId>com.codingapi.txlcn</groupId><artif ...

最新文章

  1. Dubbo 和 HSF 在阿里的实践:携手走向下一代云原生微服务
  2. 假如计算机是中国人发明的,那代码应该这么写
  3. java condition_死磕 java同步系列之ReentrantLock源码解析(二)
  4. 机器学习数据管理初创公司SafeGraph融资1600万美元
  5. java.lang.OutOfMemoryError:GC overhead limit exceeded
  6. bitnami mysql_最新 Bitnami redmine安装与配置
  7. 平衡二叉树建立、实现和判断
  8. CentOS的 ifconfig/mail/traceroute命令不存在
  9. 简化CommunityServer模板机制
  10. 网络系统设计综合布线方案
  11. 前端,html,css,js,vue
  12. NPN和PNP型传感器或开关如何接线?
  13. excel----分组后统计
  14. 武汉大学计算机学院 夏令营,武汉大学计算机学院2020保研夏令营通知
  15. android 屏蔽电源键,home键
  16. 如何升级composer
  17. 【TUN模式】对QQ或者微信域名、QQ邮箱、微信公众号文章、微信开发者社区相关的网站访问非常慢、图片加载不出来、网页空白的解决方案
  18. 选择报表工具软件的最新十大标准出炉
  19. 听我说北京之开篇寄语
  20. 值得长期持有的10只成长股

热门文章

  1. 盘点老外对女人的爆笑称呼
  2. Dart_Flutter【插件介绍+平台发布+视频】【180个网址导航】
  3. 【Linux学习】信号——信号保存 | 信号处理 | 不可重入函数,volatile,SIGCHLD信号
  4. 朋友走了 失落感来了
  5. 查看Linux下的文件
  6. 【腾讯云】云服务器 Nginx 内网访问 COS 省流量费
  7. java outer什么意思_java里面outer、 inner是什么意思
  8. 大数据可视化技术——平行坐标图、成对关系图、高级折线图
  9. java 图片添加水印(文字水印+图片水印)
  10. python数据分析项目之超市零售分析