65-82-springcloud-gateway-config-bus

news2024/11/24 17:26:57

65-82-springcloud-gateway-config-bus:

Gateway

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

1、什么是gateway

Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和Project Reactor等技术。

Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能,例如:熔断、限流、重试等。

SpringCloud Gateway旨在为微服务架构提供—种简单有效的统一的API路由管理方式

目标:提供统一的路由方式且基于 Filter链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

作用:方向代理,鉴权,流量控制,熔断,日志监控

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79vqPtWB-1670857012090)(png/image-20220424215525872.png)]

微服务架构中网关的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Agh6kdgc-1670857012091)(png/image-20220424215841374.png)]

2、GateWay非阻塞异步模型

因为netflix的zuul2.0一直不发布,并且Gateway是基于异步非阻塞模型上进行开发的,性能更好。
SpringCloud Gateway具有如下特性

1、基于Spring Framework 5,Project Reactor和Spring Boot 2.0进行构建;
2、动态路由:能够匹配任何请求属性;
3、可以对路由指定Predicate (断言)和Filter(过滤器);
4、集成Hystrix的断路器功能;
5、集成Spring Cloud 服务发现功能;
6、易于编写的Predicate (断言)和Filter (过滤器);
7、请求限流功能;
8、支持路径重写。

Gateway模型

其实就是异步非阻塞

WebFlux: https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#spring-webflux

传统的Web框架,比如说: Struts2,SpringMVC等都是基于Servlet APl与Servlet容器基础之上运行的。

但是在Servlet3.1之后有了异步非阻塞的支持。而WebFlux是一个典型非阻塞异步的框架,它的核心是基于Reactor的相关API实现的。相对于传统的web框架来说,它可以运行在诸如Netty,Undertow及支持Servlet3.1的容器上。非阻塞式+函数式编程(Spring 5必须让你使用Java 8)。

Spring WebFlux是Spring 5.0 引入的新的响应式框架,区别于Spring MVC,它不需要依赖Servlet APl,它是完全异步非阻塞的,并且基于Reactor来实现响应式流规范。

3、Gateway工作流程三大核心概念

三大核心概念:

Route(路由) :路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如断言为true则匹配该路由;
Predicate(断言) :参考的是Java8的java.util.function.Predicate,开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由;
Filter(过滤) :指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eLkrv1iR-1670857012091)(png/image-20220424220917761.png)]

web请求,通过一些匹配条件,定位到真正的服务节点。并在这个转发过程的前后,进行一些精细化控制。比如url

predicate就是我们的匹配条件,例如path路由匹配,after,between等;

fliter,就可以理解为一个无所不能的拦截器。有了这两个元素,再加上目标uri,就可以实现一个具体的路由了

gateway工作流程

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-how-it-works

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrw0KzLG-1670857012092)(png/image-20220424221439906.png)]

客户端向Spring Cloud Gateway发出请求。然后在Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到GatewayWeb Handler。

Handler再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。

过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post")执行业务逻辑。

Filter在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

核心逻辑:路由转发 + 执行过滤器链。

cloud-gateway-gateway9527

4、GateWay常用的Predicate

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

Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。

Spring Cloud Gateway包括许多内置的Route Predicate工厂。所有这些Predicate都与HTTP请求的不同属性匹配。多个RoutePredicate工厂可以进行组合。

Spring Cloud Gateway创建Route对象时,使用RoutePredicateFactory 创建 Predicate对象,Predicate 对象可以赋值给Route。Spring Cloud Gateway包含许多内置的Route Predicate Factories。
所有这些谓词都匹配HTTP请求的不同属性。多种谓词工厂可以组合,并通过逻辑and。

常用的Route Predicate Factory

The After Route Predicate Factory
The Before Route Predicate Factory
The Between Route Predicate Factory
The Cookie Route Predicate Factory
The Header Route Predicate Factory
The Host Route Predicate Factory
The Method Route Predicate Factory
The Path Route Predicate Factory
The Query Route Predicate Factory
The RemoteAddr Route Predicate Factory
The weight Route Predicate Factory

5、GateWay的Filter

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

路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。Spring Cloud Gateway内置了多种路由过滤器,他们都由GatewayFilter的工厂类来产生。

Spring Cloud Gateway的Filter:

GatewayFilter - 有31种
GlobalFilter - 有10种
常用的GatewayFilter:AddRequestParameter GatewayFilter

自定义全局GlobalFilter,两个主要接口介绍:

GlobalFilter和Ordered

能干什么:

  1. 全局日志记录
  2. 统一网关鉴权

config

官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.1.RELEASE/reference/html/

cloud-config-center-3344 cloud-config-center-3355 cloud-config-center-3366

1、什么是config

分布式系统面临的配置问题,微服务要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,否则每个微服务都有一个application.yml,难以管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YWAHy9OB-1670857012092)(png/image-20220424223228933.png)]

SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

SpringCloud Config分为服务端和客户端两部分。

服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口。

客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。

springcloud config 能干嘛

1、集中管理配置文件
2、不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
3、运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
4、当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
5、将配置信息以REST接口的形式暴露 - post/crul访问刷新即可…

参考:https://www.bilibili.com/video/BV18E411x7eT?p=76

2、配置读取规则

  • /{name}-{profiles}.yml
  • /{label}-{name}-{profiles}.yml
  • label:分支(branch)
  • name:服务名
  • profiles:环境(dev/test/prod)

https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.1.RELEASE/reference/html/#_quick_start

1、/{label}/{application}-{profile}.yml(推荐)

  • http://config-3344.com:3344/master/config-dev.yml

2、/{application}-{profile}.yml

  • http://config-3344.com:3344/config-dev.yml

3、/{application}/{profile}[/{label}]

  • http://config-3344.com:3344/config/dev/master

Bus

1、什么是bus

Spring Cloud Bus 配合Spring Cloud Config 使用可以实现配置的动态刷新。用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。Spring Clud Bus目前支持RabbitMQ和Kafka。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yt5ICEZ7-1670857012093)(png/image-20220424224108359.png)]

Spring Cloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可以当作微服务间的通信通道。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Sn21RwZ-1670857012093)(png/image-20220424224141497.png)]

2、为何被称为总线

即:所有人都听总部的命令,总部发生什么变化,监听的服务都会知道,被动接收到通知。

总线:在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。

基本原理

ConfigClient实例都监听MQ中同一个topic(默认是Spring Cloud Bus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置。

设计思想

1.利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置(不够好,客户端应当单一。只做客户端的事情。通知其他客户端由服务端处理更加合适)

2.利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-heOBvOiE-1670857012093)(png/image-20220424224550453.png)]

图—不适合的原因有:

1、打破了微服务的职责单一性,因为微服务本身是业务模块,它本不应该承担配置刷新的职责。

2、破坏了微服务各节点的对等性。

3、有一定的局限性。例如,微服务在迁移时,它的网络地址常常会发生变化,此时如果想要做到自动刷新,那就会增加更多的修改。

测试

启动

​ EurekaMain7001
​ ConfigcenterMain3344
​ ConfigclientMain3355
​ ConfigclicntMain3366
运维工程师

​ 修改Github上配置文件内容,增加版本号
​ 发送POST请求
​ curl -X POST “http://localhost:3344/actuator/bus-refresh”
​ —次发送,处处生效
配置中心

​ http://config-3344.com:3344/config-dev.yml
客户端

​ http://localhost:3355/configlnfo
​ http://localhost:3366/configInfo
获取配置信息,发现都已经刷新了

3、通知总结图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U4wyrir1-1670857012094)(png/image-20220424224823079.png)]

学习路径:https://space.bilibili.com/302417610/,如有侵权,请联系q进行删除:3623472230

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++引用

1.什么是c引用&#xff1f; 引用是c对c的重要扩充。c中新增了引用的概念&#xff0c;引用可以作为一个已定义变量的别名。 #include "stdafx.h" #include <iostream> using namespace std; // 1.引用的基本使用 void test01(){int a 10;// 给变量a取一个别名…

金仓数据库KingbaseES 归档日志清理

WAL是Write Ahead Log的简写&#xff0c;和Oracle的redo日志类似&#xff0c;在R3版本存放在data/sys_log中&#xff0c;R6版本以后在data/sys_wal目录&#xff0c;在数据库访问过程中&#xff0c;任何对数据块的修改都会记录到wal日志&#xff0c;并写入到wal文件保存到磁盘&a…

PMP有没有必要续证呢?

在还只看到标题的时候&#xff0c;我当时就觉得必须续啊&#xff0c;为什么不续&#xff0c;我花了那么多时间精力和钱财去考的&#xff0c;我自然得去给它续上&#xff0c;不然白拿了&#xff0c;才拿了三年我还没捂热就给我失效了多不值。 首先美国PMI要求PMP证书是三年一换…

面试题 :Unity编辑器基础

1、请描述游戏动画有几种&#xff0c;以及其原理。 关键帧动画&#xff1a;每一帧动画序列当中包含了顶点的空间位置信息以及改变量&#xff0c;然后通过插值运算&#xff0c;得出动画效果。选中某一游戏对象&#xff0c;创建animation&#xff0c;添加属性Transform&#xff0…

【Meetup 预告】OpenMLDB + MaxCompute:集成打通云上生态,高效构建 AI 应用

2022年12月3日&#xff08;周六&#xff09;上午10&#xff1a;00-12:00&#xff0c;开源机器学习数据库 OpenMLDB 第八期 Meetup 将通过线上直播的形式展开。 活动背景 数据的爆发式增长为 AI 应用的繁荣提供了坚实的基础&#xff0c;而云服务作为新一代快速整合、高效计算的…

STC-Seg:首个超越PointTrack的弱监督视频MOTS算法

弱监督视频多目标实例分割新SOTA&#xff08;代码已开源&#xff09;&#xff1a; Paper: Solve the Puzzle of Instance Segmentation in Videos: A Weakly Supervised Framework with Spatio-Temporal Collaboration Code: https://github.com/ylqi/STC-Seg 众所周知&#xf…

linux之syslog使用说明

syslog 系统日志应用 1) 概述 syslog默认的日志守护进程。默认的syslog配置文件是/etc/syslog.conf文件。程序&#xff0c;守护进程和内核提供了访问系统的日志信息。因此&#xff0c;任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成该信息。 几乎所有的网络设…

【2台真机实战--Redis一主一从两哨兵配置集群和主从切换】

2台真机实战--Redis一主一从两哨兵配置集群和主从切换前言实战真实环境节点分布配置主服务器&#xff08;192.168.137.23&#xff09;配置redis.conf配置sentinel.conf从服务器&#xff08;192.168.137.24&#xff09;配置redis.conf配置sentinel.conf启动redis整合SpringBoot配…

[附源码]Node.js计算机毕业设计服装销售商城系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

python之路 socket、socket server

一、socket socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制&#xff0c;取后一种意思。通常也 称作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄&#xff0c;可以用来实现不同虚拟机或不同计算机之间的通信。在Inter…

nodejs+vue大学生企业推荐系统vue

1、 node_modules文件夹(有npn install产生) 这文件夹就是在创建完项目后&#xff0c;cd到项目目录执行npm install后生成的文件夹&#xff0c;下载了项目需要的依赖项。 2、package.json文件 此文件是项目的配置文件&#xff08;可定义应用程序名&#xff0c;版本&am…

Java基础之并发理论基础

Java基础之并发理论基础一、为什么需要多线程二、线程不安全1、三要素之一可见性&#xff08;CPU缓存引起&#xff09;2、三要素之一原子性&#xff08;分时复用引起&#xff09;3、三要素之一有序性&#xff08;重排序引起&#xff09;一、为什么需要多线程 CPU 增加了缓存&a…

springcloud3 EurekaServer集群的搭建1

一 EurekaServer集群搭建 1.1 逻辑流程 服务的注册与发现 服务注册&#xff1a;向注册中心进行注册登记。 服务发现&#xff1a;从注册中心中获取服务器信息。 整个流程 1.首先eurekaServer先进行启动&#xff0c; 2.服务提供者开始启动并将自己的信息注册到EurekaServer上(前…

如何获取java加载器和类完整结构的方法?

类加载器的作用与类缓存&#xff1a; 类加载器的作用&#xff1a;将class文件字节码内容加载到内存中&#xff0c;并将这些静态数据转换成方法区的运行时数据结构&#xff0c;然后在堆中生成一个代表这个类的java.lang.Class对象&#xff0c;作为方法区中类数据的访问入口。 …

红绿灯(交通信号灯)检测数据集

深度学习目标检测&#xff1a;红绿灯(交通信号灯)检测数据集 目录 深度学习目标检测&#xff1a;红绿灯(交通信号灯)检测数据集 1.红绿灯数据集说明 &#xff08;1&#xff09;Traffic-Lights-Dataset-Domestic &#xff08;2&#xff09;Traffic-Lights-Dataset-Foreign …

第12部分 交换机基本配置

目录 12.1 交换机简介 12.2 实验1&#xff1a;交换机基本配置 1.实验目的 2.实验拓扑 3.实验步骤 12.3 实验2&#xff1a;交换机端口安全 1.实验目的 2.实验拓扑 3.实验步骤 4.实验调试 12.4 实验3&#xff1a;交换机的密码恢复 1.实验目的 2.实验拓扑 3.实验步骤…

React学习8(新旧生命周期)

组件的生命周期&#xff08;旧&#xff09; react生命周期&#xff08;旧&#xff09; 1.初始化阶段&#xff1a;由ReactDOM.render()触发---初次渲染 1.constructor(){} 2.componentWillMount() {} 3.render() {} 4.componentDidMount() {}----常用&#xff0c;一般在这个钩子…

ElasticSearch的数据存储及写入原理

数据存储 数据存储介绍 Elasticsearch 是面向文档型数据库&#xff0c;一条数据在这里就是一个文档。 为了方便大家理解&#xff0c;我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比。 注意&#xff1a;Types 的概念已经被逐渐弱化&…

上海亚商投顾:沪指全天窄幅震荡 大消费板块再掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪沪指全天窄幅震荡&#xff0c;创业板指高开低走。医药股大幅分化&#xff0c;新华制药6连板&#xff0c;股价创出历…

软件测试丨单元测试框架怎么搭?新版的Junit5有哪些神奇之处?

单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证。 总的来说&#xff0c;单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动&#xff0c;软件的独立单元将在与程序的其他部…