当前位置: 首页 > news >正文

61.微服务保姆教程 (四) Gateway---SpringCloud微服务网关组件

Gateway—SpringCloud微服务网关组件

一、Spring Cloud Gateway简介

1.为什么要用Gateway?

在微服务架构中,通常一个系统会被拆分为多个微服务,微服务之间的调用可以用OpenFeign,但面对这么多微服务客户端调用会遇到哪些问题呢?

在这里插入图片描述

  1. 每个服务都需要鉴权、限流、跨域访问、权限验证等操作,如果每个微服务各自为战,会很麻烦。

  2. 对于客户端来说,每个微服务都分配一个域名的话,客户端代码会很难维护,而且连接数也会有瓶颈.

  3. 随着一个项目的微服务的增多,后期对微服务进行重构的话,也会变的非常麻烦,需要客户端配合一起修改。

2、Spring Cloud Gateway 的定义

为了解决上面的问题,微服务引入了 网关 的概念,网关为微服务架构的系统提供简单、有效且统一的API路由管理,作为系统的统一入口,提供内部服务的路由中转,给客户端提供统一的服务,可以实现一些和业务没有耦合的公用逻辑,主要功能包含认证、鉴权、路由转发、安全策略、防刷、流量控制、监控日志等。

Spring Cloud Gateway 是 Spring Cloud 新推出的网关框架,之前是 Netflix Zuul。

简单来说:Gateway相当于医院大厅的挂号台,对病人进行引流。

加入网关后结构图:

在这里插入图片描述

3.Spring Cloud Gateway三大组成部分

Route(路由): 是构建网关的基本模型, 由ID ,URI 一系列的断言和过滤器组成。

Predicate (断言): 可以匹配Http 请求中所有的内容(请求头 参数等等) 请求与断言,相匹配则通过当前断言。

Filter(过滤器): 包括全局和局部过滤器 ,可以在请求被路由钱后对请求进行更改。

二、Spring Cloud Gateway快速入门

前面我们学习过Nacos,可以帮助我们管理我们的服务,学习Spring Cloud Gateway时,我们可以直接将Nacos整合进来。

1.项目项目

复制之前的Sentinel项目,在此基础上添加api-gateway子模块

添加入口类

在这里插入图片描述

2.添加Jar包

<!--gateway网关-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency><!--由于springcloud2020弃用了Ribbon,因此Alibaba在2021版本nacos中删除了Ribbon的jar包,因此无法通过lb路由到指定微服务,会出现503情况。需要引入springcloud loadbalancer包-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency><!--其它包-->
<!-- 服务注册与发现  jar包 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency><!-- nacos配置中心-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency><!-- 识别bootstrap.yml文件-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.2</version>
</dependency>

3.添加配置文件

GATEWAY-dev.yml

在这里插入图片描述

server:port: 9000
spring:application:name: GATEWAYcloud:loadbalander:  #注意这里要排除ribbonribbon:enable: falsegateway:routes:- id: search_routeuri: lb://SEARCHpredicates:- Path=/search-service/**filters:- StripPrefix=1

注解: http://localhost:9000/search-service/goods http://localhost:8083/goods

routes: 路由/路由数组   当请求满足指定的条件后转发到哪个微服务上id:    当前路由唯一的标识符 ,有默认值,也可以自定义uri: 请求最终要被转到的地址 ,lb为load balance,表示负载均衡,比如lb://SEARCH表示请求最终会转发到SEARCH服务,注意 lb://后面的<clientName>一定不要使用下划线,即不要使用比如:my_service这种形式,否则LoadBanancer不会起作用。predicates:断言,也就是条件判断,- Path=/search-service/表示当客户端访问
http://www.xdnf.cn/news/207919.html

相关文章:

  • flask中的Response 如何使用?
  • HRScene:首个覆盖多场景高分辨率图像理解的综合性基准数据集
  • deepseek_ai_ida_plugin开源插件,用于使用 DeepSeekAI 将函数反编译并重命名为人类可读的视图。该插件仅在 ida9 上进行了测试
  • 快速了解Go+rpc
  • Spark 配置 YARN 模式
  • 【安全扫描器原理】端口扫描
  • Python中的itertools模块常见函数用法示例
  • 多地部署Gerrit Replication插件同步异常解决思路及方案(附脚本与CronJob部署)
  • Cursor:AI时代的智能编辑器
  • LSTM预测模型
  • 前缀和 --- 二维前缀和
  • 基于PHP的宠物用品商城
  • RTDETRv2 pytorch训练
  • 【3D 地图】无人机测绘制作 3D 地图流程 ( 无人机采集数据 | 地图原始数据处理原理 | 数据处理软件 | 无人机测绘完整解决方案 )
  • 什么是静态住宅ip,跨境电商为什么要用静态住宅ip
  • IP属地是实时位置还是自己设置
  • SRIO IP调试问题记录(ready信号不拉高情况)
  • CentOS上搭建 Python 运行环境并使用第三方库
  • 【运维】还原 Docker 启动命令的利器:runlike 与 docker-autocompose
  • 数据结构---单链表的增删查改
  • Uniapp:设置页面下拉刷新
  • 1.1 点云数据获取方式——引言
  • Weka通过10天的内存指标数据计算内存指标动态阈值
  • 判断子序列
  • 问答:C++如何通过自定义实现移动构造函数和移动赋值运算符来实现rust的唯一所有权?
  • AI Agent开源技术栈
  • RabbitMQ 启动报错 “crypto.app“ 的解决方法
  • 项目三 - 任务2:创建笔记本电脑类(一爹多叔)
  • MySQL--数据引擎详解
  • gem5-gpu 安装过程碰到的问题记录 关于使用 Ruby + Garnet