spring-cloud-gateway统一前缀

本文介绍了在Spring Cloud Gateway中为后端API接口添加前缀的方法,通过理解Spring Cloud Gateway的工作原理,探讨了ThePrefixPathGatewayFilterFactory和TheStripPrefixGatewayFilterFactory两个过滤器的使用,以实现区分前端路由和后端接口。最终得出结论,选择其一即可解决前端路由代理问题。
部署运行你感兴趣的模型镜像

由于前端框架需要做路由代理,需要在后端api接口加上前缀,区分前端路由跟后端接口。前后端分离项目,后端采用Spring cloud微服务架构。

一、第一次尝试(失败)
在spring-cloud-gateway的配置文件中直接加入应用的上下文路径(项目访问路径)

server:
servlet:
context-path: /api
在原有接口上增加“/api*“请求,请求不到相应的接口。

二、深入学习spring-cloud-gateway的url处理方式
1、理解spring-cloud-gateway
在Spring官网上有spring-cloud-gateway功能流程介绍图,如下图:

image
客户端向spring-cloud-getway发出请求,如果网关处理程序映射确定请求与配置路由匹配,则将其发送给网关Web,web处理程序通过特定于请求的过滤器运行请求,过滤器被虚线分割的原因是过滤器可在发送代理请求之前和之后进行逻辑运算。执行所有的过滤器逻辑。最后发送代理请求,相应的微服务执行客户端发送的请求。

2、The PrefixPath GatewayFilter Factory(前缀路径网关过滤器工厂)
设置网关前缀:

spring:
cloud:
gateway:
routes:
- id: prefixpath_route
uri: https://example.org
filters:
- PrefixPath=/mypath
This will prefix /mypath to the path of all matching requests. So a request to /hello would be sent to /mypath/hello.

这将为所有匹配请求的路径加上前缀/mypath。因此,/hello的请求将使用到/mypath/hello。

3、The StripPrefix GatewayFilter Factory(带前缀的网关过滤工厂)
设置网关前缀:

spring:
cloud:
gateway:
routes:
- id: nameRoot
uri: https://nameservice
predicates:
- Path=/name/**
filters:
- StripPrefix=2
When a request is made through the gateway to /name/blue/red, the request made to nameservice looks like nameservice/red.

当通过网关向/name/blue/red发出请求时,向nameservice发出的请求看起来就像nameservice/red。

总结:
在第2种方法与第3种方法选用一种就行。

作者:程序者王大川
链接:https://www.jianshu.com/p/324372192a26
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

### 解决 Spring Cloud Gateway 与 Web 模块不兼容问题 在处理 Spring Cloud Gateway 和传统 Web 模块(如基于 `@Controller` 的 MVC 控制器)之间的兼容性问题时,主要原因是两者底层运行模式的不同。Spring Cloud Gateway 是基于 Reactor 和 Netty 实现的响应式框架,而传统的 Spring MVC 则依赖于 Servlet 容器。 #### 配置调整 为了使 Spring Cloud Gateway 正常工作而不干扰其他模块的功能,在项目的全局配置文件 `application.yml` 中可以指定应用的 Web 应用程序类型为反应式: ```yaml spring: main: web-application-type: reactive ``` 上述配置能够确保 Spring Boot 启动时加载的是 Reactive 类型的应用上下文而不是默认的传统 Servlet 上下文[^1]。 #### 使用场景分离 如果项目中既需要使用 Spring Cloud Gateway 提供 API 路由功能又保留部分原有 Spring MVC 功能,则可以通过以下方式实现两者的共存: - **路径区分**:通过定义不同的基础路径来隔离网关请求和其他业务逻辑请求。 例如,在网关层设置 `/api/**` 前缀用于代理外部服务调用;而对于内部管理接口则保持原样或者采用独立子域名部署策略。 #### 技术选型说明 考虑到现代微服务体系架构的需求变化趋势以及性能优化考量,推荐逐步迁移至全栈响应式开发模式——即全面拥抱 Spring WebFlux 取代传统 Spring MVC 构建新的 RESTful 接口服务端点[^2]。这样不仅可以充分利用异步非阻塞特性提升吞吐量表现,同时也更易于维护统一的技术栈版本一致性。 对于已有系统的改造过程应遵循渐进原则,优先针对高并发访问热点区域实施重构升级操作,并充分测试验证新旧组件交互行为无误后再推广到整个平台范围之内。 --- ### 示例代码片段展示如何声明一个简单的Reactive Controller 以下是利用 Spring WebFlux 创建的一个基本控制器例子: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; @RestController public class SampleReactiveController { @GetMapping("/reactive") public Mono<String> getReactiveMessage() { return Mono.just("This is a reactive message!"); } } ``` 此段代码展示了如何在一个完全响应式的环境中返回数据流给客户端。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值