文章目录

  • 十一、zuul路由网关
  • 十二、Gateway新一代网关
    • 简介
    • 三大核心概念
      • Route(路由)
      • Predicate(断言)
      • Filter(过滤)
      • 总体
    • Gateway工作流程
    • 入门配置
      • Gateway网关路由的两种配置方式
    • 通过微服务名实现动态路由
    • Predicate的使用
      • After/Before/Between
      • Cookie
      • Header
      • Host
      • Method
      • Path
      • Query
      • 总结
    • Filter的使用
      • 自定义过滤器

十一、zuul路由网关

zuul核心人员走了两个,zuul2的研发过久,spring公司等不及,自己研发的Gateway网关。

zuul路由网管,阳哥没讲,跳过,没笔记。
https://github.com/Netflix/zuul/wiki

十二、Gateway新一代网关

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/

简介













三大核心概念

Route(路由)

Predicate(断言)

Filter(过滤)

总体


Gateway工作流程

官网总结


入门配置

  1. 新建模块cloud-gateway-gateway9527

  2. pom

    <dependencies><!--gateway--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- 引用自己定义的api通用包,可以使用Payment支付Entity --><dependency><groupId>com.angenin.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></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>
    
  3. yml

    server:port: 9527spring:application:name: cloud-gatewayeureka:instance:hostname: cloud-gateway-serviceclient:fetch-registry: trueregister-with-eureka: trueservice-url:defaultZone: http://eureka7001.com:7001/eureka/
    
  4. 主启动类GatewayMain9527

    @SpringBootApplication
    @EnableEurekaClient
    public class GatewayMain9527 {public static void main(String[] args) {SpringApplication.run(GatewayMain9527.class, args);}
    }
    
  5. 修改yml文件

    server:port: 9527spring:application:name: cloud-gatewaycloud:gateway:routes:- id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名#匹配后提供服务的路由地址uri: http://localhost:8001predicates:- Path=/payment/get/** # 断言,路径相匹配的进行路由- id: payment_route2uri: http://localhost:8001predicates:- Path=/payment/lb/** #断言,路径相匹配的进行路由eureka:instance:hostname: cloud-gateway-serviceclient:fetch-registry: trueregister-with-eureka: trueservice-url:defaultZone: http://eureka7001.com:7001/eureka/
    
  6. 测试,启动7001,cloud-provider-payment8001,9527


    http://localhost:8001/payment/get/1

    http://localhost:9527/payment/get/1

Gateway网关路由的两种配置方式

  1. 在配置文件中配置
    在配置文件yml中配置

  2. 在配置类中配置
    代码中注入RouteLocator的Bean

    新建config.GatewayConfig

    @Configuration
    public class GatewayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();routes.route("path_route_angenin",  //idr -> r.path("/guonei")  //访问 http://localhost:9527/guonei.uri("http://news.baidu.com/guonei"));  //就会转发到 http://news.baidu.com/guoneiroutes.route("path_route_angenin2",  //idr -> r.path("/guoji")  //访问 http://localhost:9527/guoji.uri("http://news.baidu.com/guoji"));  //就会转发到 http://news.baidu.com/guonjireturn routes.build();}//    @Bean
    //    public RouteLocator customRouteLocator2(RouteLocatorBuilder routeLocatorBuilder){//        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
    //
    //        routes.route("path_route_angenin2",  //id
    //                r -> r.path("/guoji")  //访问 http://localhost:9527/guoji
    //                        .uri("http://news.baidu.com/guoji"));  //就会转发到 http://news.baidu.com/guonji
    //
    //        return routes.build();
    //    }}
    

测试,启动7001,8001,9527
http://localhost:9527/guonei

http://localhost:9527/guoji

通过微服务名实现动态路由


修改yml文件

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

enabled默认false:

测试,启动7001,8001,8002,9527
http://localhost:9527/payment/lb

Predicate的使用


官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories

常用的Route Predicate

After/Before/Between

新建测试类T2

public class T2 {public static void main(String[] args) {//获取当前时间串ZonedDateTime now = ZonedDateTime.now();System.out.println(now);//2020-06-17T11:53:40.325+08:00[Asia/Shanghai]}}

然后在yml中的predicates:加上

         #指定时间后才能访问(After)时间往后写一小时- After=2020-06-17T12:53:40.325+08:00[Asia/Shanghai]

测试,启动7001,8001,8002,9527
http://localhost:9527/payment/lb

Before和Between作用一样:

         #指定时间前才能访问(Before)- Before=2020-06-17T11:53:40.325+08:00[Asia/Shanghai]#指定时间内才能访问(Between)- Between=2020-06-17T11:53:40.325+08:00[Asia/Shanghai],2020-06-17T12:53:40.325+08:00[Asia/Shanghai]

Cookie



在yml中的predicates:加上(记得把after的时间改成已经过去的时间,时间没到访问不了)

          - Cookie=username,angenin   #带Cookie,并且username的值为angenin
  1. 不带cookie访问
    打开终端,输入curl http://localhost:9527/payment/lb(直接访问失败)

  2. 带cookie访问
    输入curl http://localhost:9527/payment/lb --cookie "username=angenin"

Header



注释掉其他两个,加上Header

#            - After=2020-06-17T12:53:40.325+08:00[Asia/Shanghai]
#            - Cookie=username,angenin   #带Cookie,username的值为angenin- Header=X-Request-Id, \d+   #请求头要有 X-Request-Id属性并且值为整数的正则表达式

重启9527,然后在终端输入http://localhost:9527/payment/lb -H "X-Request-Id:123"

Host


加上:

            - Host=**.angenin.com   #Host: xxx.angenin.com 请求是Host必须有**.angenin.com

重启9527
http://localhost:9527/payment/lb -H "Host: www.angenin.com"

Method

            - Method=GET    #只允许get请求访问

Path

         #访问的url地址有 /payment/lb/ 才能访问- Path=/payment/lb/**

已经用过了,这里不进行演示。

Query

            - Query=username, \d+   #url请求地址必须带上username参数,并且值必须为整数

http://localhost:9527/payment/lb?username=110


总结

Filter的使用




GatewayFilter(31种)
Global Filter(10种)

这里以AddRequestParameter为代表。

自定义过滤器


新建filter.MyLogGateWayFilter

@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("**************come in MyLogGateWayFilter:" + new Date());//获取request中的uname参数String uname = exchange.getRequest().getQueryParams().getFirst("uname");if(uname == null){log.info("*******用户名为null,非法用户!!");//设置响应,不被接受exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);return exchange.getResponse().setComplete();}//返回chain.filter(exchange),放行return chain.filter(exchange);}@Overridepublic int getOrder() {//返回值是过滤器的优先级,越小优先级越高(最小-2147483648,最大2147483648)return 0;}
}

启动7001,8001,8002,9527
http://localhost:9527/payment/lb?uname=111

http://localhost:9527/payment/lb?xxx=111

下一篇笔记:最新的SpringCloud(H版&Alibaba)技术(13-14初级部分,服务配置【Config】与消息总线【Bus】)

学习视频(p65-p73):https://www.bilibili.com/video/BV18E411x7eT?p=65

最新的SpringCloud(H版Alibaba)技术(11-12初级部分,网关【Gateway】)相关推荐

  1. SpringCloud(H版alibaba)之基本框架篇

    SpringCloud(H版&alibaba)之基本框架篇 什么是微服务 https://www.bilibili.com/video/BV18E411x7eT?p=14 视频内容 微服务和分 ...

  2. springcloud H版+alibaba cloud4

    springcloud H版+alibaba cloud4 19,sleuth链路追踪 20,springcloud alibaba 21,nacos 22,sentinel 23,seata 19, ...

  3. 尚硅谷SpringCloud(H版alibaba)框架开发教程(大牛讲授spring cloud) 最详细的。

    尚硅谷SpringCloud(H版&alibaba)框架开发教程(大牛讲授spring cloud) 一. 从2.2.x和H版开始说起 二.关于Cloud各种组件的停更/升级/替换 三.微服务 ...

  4. 尚硅谷2020最新版周阳SpringCloud(H版alibaba)框架开发教程 学习笔记

    前言:今天看到周阳老师出了新课,十分欣喜,很喜欢周阳老师的讲课风格,内容也充实,我也算是周阳老师忠实粉丝啦. 新出的springcloud第二版很符合我现阶段的学习需求.但美中不足的是,目前只有视频资 ...

  5. SpringCloud( H版 alibaba )框架开发教程(中级)

    中级 编码五部曲: 建module 改pom 写yml 主启动 业务类 所有源码地址:https://gitee.com/xyy-kk_admin/spring-cloud 入门篇链接:https:/ ...

  6. 尚硅谷2020最新版SpringCloud(H版alibaba)框架开发教程全套完整版从入门到精通

    01_前言闲聊和课程说明 02_零基础微服务架构理论入门 03_第二季Boot和Cloud版本选型 04_Cloud组件停更说明 05_父工程Project空间新建 06_父工程pom文件 07_复习 ...

  7. 尚硅谷周阳老师2020年 SpringCloud(H版和Alibaba) 视频教程学习时整理的笔记记录和代码

    尚硅谷周阳老师2020年 SpringCloud(H版和Alibaba)视频教程学习时整理的笔记记录和代码 尚硅谷周阳老师SpringCloud(H版和Alibaba)学习.代码摘录,下面是各个mod ...

  8. SpringCloud H版之Eureka学习

    SpringCloud H版之Eureka学习 欢迎学习SpringCloud Netflix Eureka 什么是服务注册与发现 Eureka Server提供服务注册服务 EurekaClient ...

  9. SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤

    说在前面 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制,监控,限流等等. 创建路由网关(Gateway)启动服务cloud-ac ...

最新文章

  1. 2021年春季学期-信号与系统-第十二次作业参考答案-第三小题
  2. Nhibernate分页测试续(附源码)
  3. 【集合论】关系闭包 ( 关系闭包相关定理 )
  4. Android RemoteController使用
  5. mvcpager之学习
  6. 河外动态:疑似UFO的编队在太阳附近徘徊
  7. .Net之Layui多图片上传
  8. 【转】打印机硬件发现不了解决办法
  9. 【MyBean调试笔记】接口的使用和清理
  10. Java并发(基础知识)—— 创建、运行以及停止一个线程
  11. html-制作开心网游戏页面,【手把手】制作一个简单的HTML网页
  12. Poi-tl通过word模板生成文件页眉页脚冲突问题
  13. python 画雷达图设置背景颜色
  14. MOSES系统训练中间过程和意义详解
  15. AD采集中常用的Ksps什么意思
  16. java基于ssm开发的弹幕视频网站源码
  17. 佛山市南海技师学校计算机类,佛山南海信息技术学校2019年招生录取分数线
  18. Python能做什么?
  19. Consul Consensus Protocol
  20. 让人绝望的C语言恶搞小程序,网友:生无可恋!

热门文章

  1. Spacy en_core_web_sm
  2. dplayer解析源码php调用,从demo分析ijk源码一:视频播放
  3. scala:查询圆周率pi
  4. 学习曲线和决策边界的绘制
  5. 天使投资人徐小平:最爱理性狂热创业者
  6. “素质教育”与“动力汽车”——徐小平
  7. Redis连接池技术笔记小结 RedisPool
  8. 基于JavaWeb SSM mybatis 私人健身房系统管理平台设计和实现以及文档报告
  9. Java中class与Class的区别
  10. 阿里员工感慨:涂鸦和阿里之间选了阿里,涂鸦上市了,小丑竟是我自己