IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringCloud GateWay 相关图形,dljd-cat,p95完 -> 正文阅读

[Java知识库]SpringCloud GateWay 相关图形,dljd-cat,p95完

一 业务:微服务

二?想法、需求、问题:统一入口

三?解决方案:

1?集群与架构(11)

  1. 第一排:前端设备:PC端、app、小程序
  2. 第二排:负载均衡软件或硬件,如Nginx
  3. 第三排:网关(可集群),如Gateway
    1. Gateway是各个微服务的全局入口
    2. 每个Gateway都可以跳到任意的微服务
  4. 第四排:多个微服务

2 功能“集”:网关

3 “神”冰箱:spring cloud Gateway

四 “完成”“高效”视频

1?体系组织

  1. spring cloud?Gateway 是一个spring cloud下的子项目。

  2. Spring Cloud Gateway 提供了一个用于在Spring MVC之上构建API网关的库。

  3. jdk8以上。

  4. 建立在Spring Framework 5,Project Reactor和Spring Boot 2.0之上。

  5. netty

    1. 注:因此网关项目不能添加springboot-web-starter起步依赖,因为内嵌的tomcat会和netty起冲突

2 思想

????????Spring Cloud Gateway旨在提供一种简单而效的方法来将请求路由到任意微服务上。由于它是统一入口,因为在Spring Cloud Gateway上可以为这些微服务提供统一的跨领域的实现,例如:流控、(熔断)降级、权限控制、安全性、监视/度量和弹性等;

????????细分功能点:

  1. 能够匹配任何请求属性上的路由;

  2. 谓词和过滤器特定于路由;

  3. Hystrix断路器集成;

  4. Spring Cloud DiscoveryClient的集成;

  5. 易于编写的谓词和过滤器;

  6. 请求速率限制;

  7. 路径改写;

3 流原

(1)对比nginx:

????????spring cloud gateway是网关,即微服务的统一入口,相当于nginx的功能(其实nginx也可以做为网关)。因此在使用spring cloud gateway时,我们只需要去配置规则(路由、过滤器)就可以了。

(2)工作流程、原理:

基本概念:

  1. 路由:网关的基本构建组成,它由ID,目标URI,谓词集合和过滤器集合定义,如果集合谓词为true,则匹配路由,否则不匹配;

  2. 谓词:这是Java 8函数谓词,输入类型是Spring Framework ServerWebExchange,可以匹配HTTP请求中的所有内容,例如请求头或参数;

  3. 过滤器:这些是使用特定工厂构造的Spring Framework GatewayFilter实例,可以在发送给下游请求之前或之后修改请求和响应

宏观:?

  1. 第一步:前端,如app、小程序、pc、vue,发送http请求
  2. 第二步:请求来到spring cloud gateway微服务
    1. 第1步:规则匹配,路由、过滤器
      1. 如果规则(路由规则、过滤器)匹配上,就准备路由到微服务上
      2. 如果规则(路由规则、过滤器)匹配不上,就报404错误
  3. 第三步:spring cloud gateway的负载均衡(lb://)到相应的微服务上

微观:

  1. 第一步:Gateway Client,即客户端,如pc、小程序、app
  2. 第二步:可选,负载均衡器,如nginx。转发到网关spring cloud Gateway。
  3. 第三步:网关spring cloud Gateway
    1. 第1步:Gateway Handler Mapping,进行路由的谓词的匹配
      1. 匹配上:Gateway Web Handler
      2. 匹配不上:404
    2. 第2步:Gateway Web Handler
    3. 第3步:多个Filter,对请求过滤
    4. 第4步:Proxied Service。即代理服务。即我们的微服务。
  4. 第四步:响应
    1. 第1步:调用微服务完成
    2. 第2步:多个Filter,对响应过滤
    3. 第3步:Gateway Web Handler
    4. 第4步:Gateway Handler Mapping
    5. 第5步:返回到Gateway Client,即客户端,如pc、小程序、app

4 重:网关微服务搭建与测试

  1. 第一步:新项目,spring boot,是微服务,可注册到注册中心,可连接sentinel

  2. 第二步:添加依赖

  3. 第三步:配置文件建。议使用.yml。

    1. 第1步:指定端口

    2. 第2步:指定网关微服务的名称

    3. 第3步:启用discoveryclient网关集成,可以实现服务的发现

    4. 第4步:配置路由规则

      1. id:必须有,唯一即可

      2. uri:你要访问哪个路径,即你要访问哪个服务(注册中心的服务名),案例“lb://服务名”

        1. 前面的"lb://",表示负载均衡

        2. 可以直接写死路径:如http://localhost:8083,又如www.baidu.com

      3. predicates(谓词,即判断,“是不是”/”对不对“/”匹不匹配“):

        1. 可通配符。*号。

      4. 可选:配置过滤器

  4. 第四步:可集群

  5. 第五步:测试

    1. 第1步:启动网关微服务。启动生产者。启动消费者。

    2. 第2步:浏览器地址栏访问网关"ip:port/方法名"。

    3. 第3步:正常路由(转发)到生产者或消费者。

    4. 第4步:生产者和消费者之间又可以相互调用。

5 重:谓词

多个谓词叠加使用

总共有11个路由谓词工厂,不同谓词用于不同的场景下:

  1. The After Route Predicate Factory

    1. after谓词

    2. 匹配时间。时间之后 。格式ZoneDateTime.now()。

    3. 应用场景:到几点才能秒杀

  2. The Before Route Predicate Factory

    1. before谓词

    2. 匹配时间。时间之前。 格式ZoneDateTime.now()。

    3. 应用场景:秒杀结束

  3. The Between Route Predicate Factory

    1. between 谓词

    2. 匹配时间。时间之间。 格式ZoneDateTime.now()。

    3. 应用场景:秒杀时间范围后

  4. The Cookie Route Predicate Factory

    1. cookie 谓词

    2. 基于cookie的路由匹配规则,例如 - Cookie=chocolate,123456

      1. cookie匹配上正常路由

      2. 反之,404

    3. 测试:linux的curl命令可带token,例如:curl http://192.168.0.104/index --cookie token=123456

  5. The Header Route Predicate Factory

    1. header谓词

    2. 匹配header头

    3. 格式:Header=请求头的参数名称,值是正则表达式

    4. 测试:linux的curl命令可发送带请求头的http请求

  6. The Host Route Predicate Factor

    1. host谓词

    2. 匹配域名

  7. The Method Route Predicate Factor

    1. method谓词

    2. 匹配请求方法:GET、POST、PUSH、DELETE

  8. The Path Route Predicate Factory

    1. path谓词

    2. 匹配路径

    3. 可用通配符

    4. 可带参数

  9. The Query Route Predicate Factory

    1. query谓词

    2. 匹配查询参数(名)

  10. The RemoteAddr Route Predicate Factor

    1. remoteAddr谓词

    2. 匹配远程地址ip

  11. The Weight Route Predicate Factory

    1. weight谓词

    2. 匹配权重

6 重:自定义谓词:官方提供的谓词满足不了需求时

  1. 案例1:要求请求必须携带一个token,并且token值等于指定的值,才能访问;

    1. 第一步:首先定义一个配置类,用于承载配置参数
    2. 第二步:定义一个路由谓词工厂;
      1. 第1步:继承抽象类或实现接口
        1. 实现:shortcutFieldOrder()方法,获取匹配的token
          1. 按照顺序获取对应的参数
        2. 实现:apply()方法,谓词主要实现,会返回结果true或false
          1. 判断请求中参数是否满足谓词定义的条件
      2. 注意事项:TokenRoutePredicateFactory类,前面的Token与.yml配置文件里面配置的谓词名字对应,后面的RoutePredicateFactory名字是固定的,不能随便写,这是Spring Cloud Gateway的约定,类名须为“谓词工厂名(比如:Token)” + RoutePredicateFactory
    3. 第三步:在配置文件中启用该路由谓词工厂,即配置一个Token=123456;
  2. 案例2:要求某个服务用户只允许在23:00 - 6:00这个时间段内才可以访问
    1. 第一步:首先定义一个配置类,用于承载配置参数
    2. 第二步:定义一个路由谓词工厂;
      1. 第1步:继承抽象类或实现接口
        1. 实现:shortcutFieldOrder()方法,获取匹配的token
          1. ???????按照顺序获取对应的参数
        2. 实现:apply()方法,谓词主要实现,会返回结果true或false
          1. ???????判断请求中参数是否满足谓词定义的条件
    3. ????????????????????????????第三步:在配置文件中启用该路由谓词工厂

7 重:谓词不匹配404处理,定义错误页面

处理的顶层接口是WebExceptionHandler

默认实现是DefaultErrorWebExceptionHandler

我们需要覆盖它的默认实现DefaultErrorWebExceptionHandler,覆盖里面几个重要的方法,在方法里面编写我们想要返回的结果,参看我们git代码;

最后,在配置类中把这个类注入容器(@Bean)。

8 重:过滤器

  1. 谓词匹配上以后,请求被路由到过滤器(多个)。
  2. 过滤器可以对请求(数据)和响应(数据)做一些额外的处理。
  3. 总共有31个网关过滤器工厂

1.The AddRequestHeader GatewayFilter Factory

  1. 添加请求头的过滤器:即在请求来到此过滤器时,该过滤器会为请求添加一个请求头参数及其值。
  2. 可以在生产者或消费者中获取该添加的请求头参数。

2.The AddRequestParameter GatewayFilter Factory

  1. 给请求添加请求参数的过滤器? ? ? ??

3. The AddResponseHeader GatewayFilter Factory

  1. 给响应添加响应头的过滤器? ? ? ??

4. The DedupeResponseHeader GatewayFilter Factory

5. The Hystrix GatewayFilter Factory

6. Spring Cloud CircuitBreaker GatewayFilter Factory

7. The FallbackHeaders GatewayFilter Factory

8. The MapRequestHeader GatewayFilter Factory

9. The PrefixPath GatewayFilter Factory

10. The PreserveHostHeader GatewayFilter Factory

11. The RequestRateLimiter GatewayFilter Factory

12. The RedirectTo GatewayFilter Factory

13. The RemoveRequestHeader GatewayFilter Factory

14. RemoveResponseHeader GatewayFilter Factory

15. The RemoveRequestParameter GatewayFilter Factory

16. The RewritePath GatewayFilter Factory

17. RewriteLocationResponseHeader GatewayFilter Factory

18. The RewriteResponseHeader GatewayFilter Factory

19. The SaveSession GatewayFilter Factory

20. The SecureHeaders GatewayFilter Factory

21. The SetPath GatewayFilter Factory

22. The SetRequestHeader GatewayFilter Factory

23. The SetResponseHeader GatewayFilter Factory

24. The SetStatus GatewayFilter Factory

25. The StripPrefix GatewayFilter Factory

26. The Retry GatewayFilter Factory

27. The RequestSize GatewayFilter Factory

28. The SetRequestHost GatewayFilter Factory

29. Modify a Request Body GatewayFilter Factory

30. Modify a Response Body GatewayFilter Factory

31. Default Filters

9 重:自定义过滤器

Spring Cloud Gateway自定义路由过滤器

网关过滤器的顶层接口是GatewayFilterFactory

通常情况下可以继承AbstractGatewayFilterFactory实现自定义网关过滤器;

或者继承AbstractNameValueGatewayFilterFactory,该方式配置方式更简单,然后覆盖里面的一个方法(applay()方法即可),具体参考一下我们的样例代码,实际上理解流程思路即可,真正需要做的时候,查一下就可以;

Spring Cloud Gateway全局过滤器

上面的过滤器工厂是执行在指定路由之上,可以称为路由过滤器(或者局部过滤器),而全局过滤器是作用于所有的路由上,对所有的路由进行过滤;

Spring cloud gateway默认内置了很多全局过滤器。比如:

1. Combined Global Filter and GatewayFilter Ordering

2. Forward Routing Filter

3. The LoadBalancerClient Filter

4. The ReactiveLoadBalancerClientFilter

5. The Netty Routing Filter

6. The Netty Write Response Filter

7. The RouteToRequestUrl Filter

8. The Websocket Routing Filter

9. The Gateway Metrics Filter

10. Marking An Exchange As Routed

springboot自动装配的时候,满足条件(要求)的全局filter???????不用配置默认是执行的、生效的。

全局过滤器有执行顺序问题,通过getOrder()方法的返回值决定执行顺序,数值越小越靠前执行。

当然我们也可以自定义全局过滤器,具体在我们的代码中有样例实现,可以参考:

  1. 第一步:实现GlobalFilter和Order接口。因为全局过滤器的顶层接口是GlobalFilter?,和GatewayFilter?有一样的接口定义,只不过GlobalFilter?会作用于所有路由;???????
    1. ??????????????Order接口返回数字,确定执行顺序
    2. GlobalFilter返回过滤器处理逻辑
  2. 第二步:实现类注册为spring的bean对象
  3. 第三步:测试

???????自己理解:

关:关联、对比



?感想、体会、领悟
?总结、归纳、规律
?具体难点
大道至简:提图表短(纲)

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:07:52  更:2022-07-17 16:08:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:25:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码