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

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

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

相关文章:

  • 网络安全中的 EDR 是什么:概述和功能
  • Leetcode Hot 100 | 543.二叉树的直径 | 递归+优化
  • python.tkinter设计标记语言(渲染6-暂停与跳过渲染)
  • Arweave 出块流程详解
  • 【优选算法】(第十一篇)
  • 排水系统C++
  • 对象存储极简理解(对象、存储桶)
  • kubeadm部署k8s集群,版本1.23.6;并设置calico网络BGP模式通信,版本v3.25--未完待续
  • Java基础 3. 面向对象
  • DevExpress WinForms中文教程:Data Grid - 如何添加或删除行?
  • 浏览器插件的标准项目结构通常包括以下几个目录和文件
  • c语言手撕内存池组件
  • 利用Puppeteer-Har记录与分析网页抓取中的性能数据
  • 网络安全 DVWA通关指南 DVWA Weak Session IDs(弱会话)
  • C++中数据类型的大小
  • [Vue CLI 3] 配置解析之 css.extract
  • Linux CTF 逆向入门
  • mysql 5.6 原生Online DDL解析
  • node学习系列之简单文件上传
  • spring cloud gateway 源码解析(4)跨域问题处理
  • spring security oauth2 password授权模式
  • Terraform入门 - 1. 安装Terraform
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 闭包--闭包作用之保存(一)
  • 二维平面内的碰撞检测【一】
  • 记录一下第一次使用npm
  • 实战|智能家居行业移动应用性能分析
  • 算法-图和图算法
  • 算法系列——算法入门之递归分而治之思想的实现
  • 无服务器化是企业 IT 架构的未来吗?
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #VERDI# 关于如何查看FSM状态机的方法
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (day6) 319. 灯泡开关
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (差分)胡桃爱原石
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (九)信息融合方式简介
  • (译)计算距离、方位和更多经纬度之间的点
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *2 echo、printf、mkdir命令的应用
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .bat批处理(六):替换字符串中匹配的子串
  • .CSS-hover 的解释
  • .net 7和core版 SignalR
  • .Net Core 生成管理员权限的应用程序
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)