Spring Cloud Alibaba-(6)Spring Cloud Gateway【网关】

embedded/2024/10/21 19:33:21/

Spring Cloud Alibaba-(1)搭建项目环境

Spring Cloud Alibaba-(2)Nacos【服务注册与发现、配置管理】

Spring Cloud Alibaba-(3)OpenFeign【服务调用】

Spring Cloud Alibaba-(4)Sentinel【流控和降级】

Spring Cloud Alibaba-(5)Seata【分布式事务】

Spring Cloud Alibaba-(6)Spring Cloud Gateway【网关】

Spring Cloud Alibaba-(7)RocketMQ【分布式消息队列】

1.什么是网关,微服务为什么要使用网关?

Gateway(网关)是一种用于管理和协调外部请求与内部服务交互的技术组件。它充当了一个中心化的代理,负责接收来自客户端的所有请求,并将其转发到适当的后端服务。以下是关于为什么要在微服务架构中使用Gateway的原因:

(1)统一接口:对外部客户端提供一个统一的访问入口。

(2)智能路由:根据请求的内容(如路径、头信息等)决定将请求转发给哪个后端服务。

(3)负载均衡:在多个相同类型的后端服务实例之间分配请求。

(4)认证和鉴权:在请求到达后端服务之前验证用户的凭证。

(5)限流:控制每个客户端的请求频率,防止滥用或DDoS攻击。

(6)缓存:存储响应数据,减少对后端服务的重复请求。

(7)协议转换:在不同的通信协议之间转换请求和响应。

(8)监控和日志:记录请求和响应的详细信息,帮助诊断问题和优化性能。

(9)错误处理:统一处理错误响应,向客户端提供一致性的错误信息。

2.项目创建 gateway 微服务

3. Gateway 整合 Nacos

3.1 引入Maven依赖

<!-- gateway 网关 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency><!-- nacos-discovery 服务发现 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3.2 配置 bootstrap.yml

server:port: 8200spring:application:name: gatewaycloud:nacos:discovery:server-addr: http://localhost:8848gateway:routes:- id: order_route          # 路由id,路由唯一标识uri: lb://order-service  # uri:需要转发的地址  lb:使用 nacos 本地负载均衡策略  order-service:服务名predicates:- Path=/order/**       # 访问网关,如果路径是以 /order 开头的所有请求,转发到 order-service- id: product_routeuri: lb://product-servicepredicates:- Path=/product/**

3.3 启动 gateway 服务,http://localhost:8200/product/getById/1 经过 Gateway 请求产品服务

4.断言工厂(Predicate Factories)

断言工厂用于定义路由规则,决定请求是否应该被路由到某个服务。常用的断言工厂包括:

断言工厂

配置

用途

Path

- Path=/api/**

匹配请求路径

Host

- Host=example.com

匹配请求的主机名

Method

- Method=GET

匹配请求的方法类型(GET、POST等)

Header

- Header=X-Token

匹配请求头部的某个字段

Query

- Query=param

匹配请求的查询参数

Cookie

- Cookie=JSESSIONID

匹配请求的Cookie

RemoteAddr

- RemoteAddr=192.168.0.0/24

匹配客户端的远程地址(IP地址)

Port

- Port=8080

匹配客户端连接的端口号

Weight- Weight=group1,2基于权重进行负载均衡

5.过滤器工厂(Filter Factories)-局部过滤器

过滤器工厂用于在请求进入或离开网关时执行某些操作。常用的过滤器工厂包括:

过滤器工厂配置用途

AddRequestHeader

- AddRequestHeader=X-Request-Header, value添加请求头

AddResponseHeader

- AddResponseHeader=X-Response-Header, value添加响应头
SetPath- SetPath=/new/path重写请求路径
SetQueryString- SetQueryString=query=value重写请求查询参数
StripPrefix- StripPrefix=/order-serv移除请求路径的前缀
Retry- Retry=404,3实现请求重试机制

 6. bootstrap.yml 使用断言工厂、过滤器工厂

spring:cloud:gateway:routes:- id: example-routeuri: lb://example-servicepredicates:- Path=/api/**filters:- AddRequestHeader=X-Request-Header, value- SetPath=/new/path

7.Gateway 整合 Sentinel 实现网关流控降级

7.1 引入Maven依赖

<!-- gateway 网关 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency><!-- sentinel 限流降级-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency><!-- sentinel 整合 gateway-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>

7.2 bootstrap.yml 配置 Sentinel 控制台地址-http://localhost:8858

server:port: 8200spring:application:name: gatewaycloud:nacos:discovery:server-addr: http://localhost:8848gateway:routes:- id: order_route          # 路由id,路由唯一标识uri: lb://order-service  # uri:路由转发的地址  lb:使用 nacos 本地负载均衡策略  order-service:服务名predicates:              # 断言:对请求进行匹配,匹配成功就路由转发,匹配不成功返回404- Path=/order/**       # 访问网关,如果路径是以 /order 开头的所有请求,转发到 order-service- id: product_routeuri: lb://product-servicepredicates:- Path=/product/**sentinel:transport:dashboard: http://localhost:8858


http://www.ppmy.cn/embedded/118218.html

相关文章

16.3 k8s容器cpu内存告警指标与资源request和limit

本节重点介绍 : Guaranteed的pod Qos最高在生产环境中&#xff0c;如何设置 Kubernetes 的 Limit 和 Request 对于优化应用程序和集群性能至关重要。对于 CPU&#xff0c;如果 pod 中服务使用 CPU 超过设置的limits&#xff0c;pod 不会被 kill 掉但会被限制。如果没有设置 li…

[Python]一、Python基础编程(2)

F:\BaiduNetdiskDownload\2023人工智能开发学习路线图\1、人工智能开发入门\1、零基础Python编程 1. 文件操作 把⼀些内容 ( 数据 )存储存放起来,可以让程序下⼀次执⾏的时候直接使⽤,⽽不必重新制作⼀份,省时省⼒ 。 1.1 文件的基本操作 1. 打开文件 2. 读写操作 3. 关闭…

Linux CentsOS定时删除一个目录下(包含子目录)的改动时间大于12小时的文件

Shell脚本 文件目录如下图 ** 查找/ai/img/目录下的所有文件** find /ai/img/ -type f查找/ai/img/目录下的所有上次改动时间大于720分钟(12小时)的文件 12 小时&#xff0c;也就是 720 分钟。所以&#xff0c;我们可以使用 -mmin 720 来查找修改时间超过 720 分钟&#xff08;…

【EPLAN】解决ELM与ELC授权不匹配问题

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决EPLAN授权-ELM与ELC授权不匹配问题&#xff1b; 2、 问题场景 用于解决在EPLAN 服务器端 ELM 授权进行了更新激活&#xff0c;客户端授权连接后&#xff0c;客户端 ELC 授权信息没有变更的情况&#xff0c;尝试…

行阶梯形矩阵的定义,通过正例和反例说明如何判断一个矩阵是不是行阶梯形矩阵

行阶梯形矩阵的定义&#xff1a; 一个矩阵被称为行阶梯形矩阵&#xff0c;如果它满足以下条件&#xff1a; 非零行在零行之上&#xff1a;所有非零行都位于零行的上方。主元位置右移&#xff1a;在非零行中&#xff0c;首个非零元素&#xff08;称为主元&#xff09;所在的列…

研1日记17

ai station 1. shell窗口下&#xff1a;tmux apt-get install tmux tmux new -s abc &#xff0c;创建一个名为abc的窗口&#xff0c;进入窗口。 按下ctrlb 再按下d 转为后台运行。tmux使用指南&#xff1a;比screen好用n倍&#xff01; - 知乎 (zhihu.com) 注意&#x…

新能源汽车知识点集萃

功能安全-->ISO26262/GB∕T 34590 2021 信息安全--->ISO21434 预期功能安全--->ISO21448 建模规范-->MAAB/JMAAB/MISAR C Codeing Standard; 开发流程--CMMI/IATF16949//ASPICE&#xff08;Automotive SPICE&#xff09;/产品规划/概念开发/设计开发/试制试验与…

企业级-pdf预览-前后端

作者&#xff1a;fyupeng 技术专栏&#xff1a;☞ https://github.com/fyupeng 项目地址&#xff1a;☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 本文 一、介绍 对于PDF预览&#xff0c;有很多开发者都遇到过头疼的难题&#xff0c;今天给大家介绍…