首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 是什么推动了单体应用到微服务架构的演进?
02 | 微服务全家桶:走进 Spring Cloud 的世界
03 | 初窥门径:我们要搭建一个怎样的微服务实战项目?
04 | 十八般兵器:如何搭建项目所需的开发环境?
05 | 牛刀小试:如何搭建优惠券模板服务?
06 | 牛刀小试:如何搭建优惠券计算服务和用户服务?
07 | Nacos体系架构:什么是服务治理?
08 | 服务治理:Nacos集群环境搭建
09 | 集成 Nacos:如何将服务提供者注册到 Nacos 服务器?
10 | 集成 Nacos:如何通过服务发现机制向服务提供者发起调用?
11 | Loadbalancer 实战:通过自定义负载均衡策略实现金丝雀测试
12 | OpenFeign:服务间调用组件 OpenFeign 是怎么“隔空取物”的?
13 | OpenFeign 实战:如何实现服务间调用功能?
14 | OpenFeign 实战:OpenFeign 组件有哪些高级玩法?
15 | 配置中心在微服务中发挥着怎样的作用?
16 | 如何集成 Nacos Config 实现配置项动态刷新?
17 | Sentinel 体系结构:什么是服务容错(降级熔断、流量整形)?
18 | Sentinel 实战:如何实施流量整形与限流策略?
19 | Sentinel 实战:如何为项目添加异常降级方案?
20 | Sentinel 实战:如何接入 Nacos 实现规则持久化?
21 | Sleuth 体系架构:为什么微服务架构需要链路追踪?
22 | 调用链追踪:集成 Sleuth 和 Zipkin,实现链路打标
23 | 调用链追踪:如何通过 ELK 实现日志检索?
24 | 为什么微服务架构少不了微服务网关?
25 | 微服务网关:Gateway 中的路由和谓词有何应用?
26 | 微服务网关:如何设置请求转发、跨域和限流规则?
27 | 微服务网关:如何借助 Nacos 实现动态路由规则?
28 | 消息驱动:谁说消息队列只能削峰填谷?
29 | 消息驱动:如何集成 Stream 实现消息驱动?
30 | 消息驱动:如何高效处理 Stream 中的异常?
31 | 消息驱动:如何通过 RabbitMQ 插件实现延迟消息?
32 | Alibaba Seata 框架:什么是分布式事务?
33 | 分布式事务:搭建 Seata 服务器
34 | 分布式事务:使用 Nacos+Seata 实现AT模式
35 | 分布式事务:使用 Nacos+Seata 实现 TCC 补偿模式
36 | 说透微服务 | 什么是主链路规划?
当前位置:
首页>>
技术小册>>
Spring Cloud微服务项目实战
小册名称:Spring Cloud微服务项目实战
### 26 | 微服务网关:如何设置请求转发、跨域和限流规则? 在微服务架构中,微服务网关(API Gateway)扮演着至关重要的角色,它作为客户端与微服务集群之间的唯一入口,负责路由转发、身份验证、安全控制、监控、限流、日志记录等多种功能。本章将深入探讨如何在微服务网关中设置请求转发、处理跨域请求以及实施限流策略,以确保系统的稳定、安全和高效运行。 #### 一、微服务网关概述 微服务网关是微服务架构中的一个核心组件,它位于客户端与后端服务之间,作为所有外部请求的单一入口点。通过网关,可以实现请求的路由、过滤、监控和聚合,有效解耦客户端与微服务之间的直接依赖,提升系统的可扩展性、可维护性和安全性。 #### 二、请求转发设置 ##### 2.1 路由配置基础 在微服务网关中,路由配置是最基本的功能之一,它决定了如何将客户端的请求转发到对应的微服务实例上。以Spring Cloud Gateway为例,路由配置通常包括目标URI、断言(Predicate)和过滤器(Filter)三个部分。 - **目标URI**:指定了请求将被转发到的服务地址。 - **断言**:用于匹配来自客户端的请求,只有满足断言条件的请求才会被转发。 - **过滤器**:在请求被转发前后,对请求或响应进行处理的组件,可用于修改请求头、请求体、响应体等。 ##### 2.2 示例配置 假设我们有一个名为`user-service`的微服务,负责处理用户相关的请求。以下是一个基于Spring Cloud Gateway的路由配置示例: ```yaml spring: cloud: gateway: routes: - id: user-service-route uri: lb://user-service # 使用Spring Cloud LoadBalancer自动发现服务 predicates: - Path=/user/** # 匹配所有以/user开头的请求 filters: - StripPrefix=1 # 移除请求路径的第一个部分(即/user),然后转发 ``` 此配置表明,所有以`/user`开头的请求都将被转发到`user-service`服务上,且请求路径中的`/user`部分会被移除。 #### 三、跨域请求处理 在微服务架构中,前端应用通常与后端服务部署在不同的域或端口上,这会导致浏览器出于安全考虑阻止跨域HTTP请求。微服务网关作为前端与后端之间的桥梁,可以很方便地解决跨域问题。 ##### 3.1 跨域资源共享(CORS) CORS是一种机制,它使用额外的HTTP头部来告诉浏览器允许一个网页运行的脚本从另一个源(域名、协议或端口)请求资源。在Spring Cloud Gateway中,可以通过全局CORS配置或路由级别的CORS配置来实现跨域请求的支持。 ##### 3.2 示例配置 以下是一个在Spring Cloud Gateway中设置全局CORS配置的示例: ```yaml spring: cloud: gateway: globalcors: cors-configurations: '[/**]': allowedOrigins: "*" allowedMethods: - GET - POST - PUT - DELETE allowedHeaders: "*" allowCredentials: true maxAge: 3600 ``` 此配置允许所有来源的跨域请求,支持GET、POST、PUT、DELETE方法,允许所有头部信息,并允许携带凭证信息,同时设置了预检请求的缓存时间为3600秒。 #### 四、限流策略实施 在微服务架构中,随着业务量的增长,服务面临的访问压力也会急剧增加。为了防止系统因过载而崩溃,需要对访问进行限制,即实施限流策略。限流可以保护系统资源,避免服务因资源耗尽而拒绝服务(DoS)。 ##### 4.1 常见的限流算法 - **计数器法**:简单直观,但存在临界问题,可能导致瞬间流量峰值超过阈值。 - **滑动窗口法**:对计数器法进行改进,将时间窗口划分为多个小窗口,分别进行计数,以平滑流量峰值。 - **漏桶算法**:以恒定速率处理请求,超出处理能力的请求将被丢弃或等待。 - **令牌桶算法**:在漏桶算法的基础上增加了突发流量的处理能力,允许以更高的速率处理一定量的突发请求。 ##### 4.2 Spring Cloud Gateway中的限流实现 Spring Cloud Gateway本身不直接提供限流功能的实现,但可以通过集成外部限流组件(如Redis、Sentinel等)来实现。以下以Redis为例,展示如何在Spring Cloud Gateway中集成Redis进行限流。 首先,需要添加Redis相关的依赖和配置,然后在网关中配置基于Redis的限流过滤器。可以使用Spring Cloud Gateway的自定义过滤器功能,结合Redis的原子操作(如INCR)来实现简单的限流逻辑。 更高级的限流实现,可以考虑使用Alibaba的Sentinel等专业限流组件,这些组件提供了丰富的限流策略、实时监控和动态调整功能,能够更好地满足复杂业务场景的需求。 #### 五、总结 微服务网关作为微服务架构中的关键组件,通过请求转发、跨域处理和限流策略的实施,为系统的稳定、安全和高效运行提供了有力保障。在实际应用中,应根据业务需求和技术栈选择合适的网关产品和配置方式,以实现最佳的性能和效果。同时,随着微服务架构的不断发展,网关的功能和性能也将持续优化和提升,以更好地适应未来业务的发展需求。
上一篇:
25 | 微服务网关:Gateway 中的路由和谓词有何应用?
下一篇:
27 | 微服务网关:如何借助 Nacos 实现动态路由规则?
该分类下的相关小册推荐:
深入拆解 Java 虚拟机
Java语言基础12-网络编程
Java性能调优实战
Mybatis合辑5-注解、扩展、SQL构建
经典设计模式Java版
java源码学习笔记
手把手带你学习SpringBoot-零基础到实战
Mybatis合辑1-Mybatis基础入门
Java必知必会-Maven高级
Java并发编程
Mybatis合辑2-Mybatis映射文件
Java语言基础9-常用API和常见算法