问题标签 [spring-cloud-gateway]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rate-limiting - Spring Cloud Gateway 中基于用户计划的速率限制
假设我的用户订阅了一个计划。那么是否可以使用 Spring Cloud Gateway 根据订阅计划对用户请求进行速率限制?鉴于有 Silver 和 Gold 计划,是否允许 Silver 订阅具有 5/10 和 Gold 50/100 的补充率/burstCapacity?
我天真地想过将 RedisRateLimiter 的新实例(见下文,我构造一个具有 5/10 设置的新实例)传递给过滤器,但我需要以某种方式从请求中获取有关用户的信息,以便能够找出是否这是银和金计划。
我是否正在尝试通过 Spring Cloud Gateway 实现甚至可能实现的目标?如果有的话,你会推荐哪些其他产品来检查这个目的?
谢谢!
spring-boot - 在 Spring-Boot 的嵌入式 Netty 中增加或移除内容长度限制
我在一些现有的微服务前面放置了一个 Spring Cloud Gateway。它主要工作,但我有一个 websocket (SockJS) 连接(显然)传输大量数据。
事实证明,Netty 显然有一个内容长度最大值——当我在我的 SockJS 路由中超出这个限制时,我收到了这个错误:
如何将 spring-boot 中的嵌入式 Netty 配置为没有内容长度限制?我无法控制响应中返回的消息的长度。
网关中的路由如下所示:
我将 sockJS 请求路由到的另一端的服务也是一个 Spring-Boot 应用程序,在 Tomcat 8.5 服务器中部署为战争。当我直接与支持服务交互时,我不会遇到与此内容长度有关的任何问题——只有当我尝试通过网关应用程序中的嵌入式 Netty 进行路由时。
我还成功地通过这条路线发送和接收较小的消息——只有当我达到这个明显的长度限制时,它才会爆炸。
我在网关中的依赖项是这样的:
- spring-cloud-starter-gateway (2.0.0.RELEASE)
- spring-boot-starter-webflux (2.0.2.RELEASE)
- spring-boot-starter-actuator (2.0.2.RELEASE)
java - Spring Cloud Gateway - 审计日志
我想将每个请求/响应记录到数据库(例如 MongoDB)中。由于找不到现有的类审计过滤器,我编写了一个简单的过滤器来执行此操作,代码如下:
如您所见,我在如何获取这些数据方面遇到了麻烦:requestStartTime、requestBody、responseBody。感谢任何建议。
spring-cloud - route.uri 字段的文件方案
像这样:
spring:
cloud:
gateway:
routes:
- id: static-file
uri: file:///data/pub/
predicates:
- Path=/file/**
它支持吗?
我想以ResourceHandlerRegistry.addResourceHandler
这种方式替换。
spring-cloud - 使用 Spring Cloud Gateway 的通用服务路由规则
我正在尝试使用 Spring Cloud Gateway 和 Consul 为我的服务制定通用路由规则。服务在 Consul 中正确注册,网关可以毫无问题地找到它们。
问题是,我想制定一个通用规则来匹配我的服务。例如,我的网关上确实有一个 hello-service 和 goodbye-service 以及以下 RouteLocator:
现在想象一个有很多微服务的环境,使用当前的解决方案,我必须为每个微服务制定一个路由规则。
我想要的是制定一个通用且更简单的路由规则,例如通配符。如果路径中包含*-service,则应该发送到指定的服务,如:
- 如果路径是/a-service/,它应该路由到a-service;
- 如果路径是/b-service/,应该路由到b-service等等;
没有明确为 a-service 和 b-service 制定规则。
这可能吗?
spring-boot - 使用spring cloud gateway调用内部服务失败时如何重试外部服务?
我正在实现一个模拟网络上可用的另一个服务的服务。我正在尝试配置 spring 云网关以在对我的实现的调用失败时将请求重新路由到公共服务。
我尝试通过以下方式使用 Hystrix 过滤器:
不幸的是,就像文档说的那样:
目前,仅支持 forward: 计划的 URI。如果调用了fallback,请求将被转发到URI匹配的控制器。
因此,我不能使用fallbackUri: https://...
.
是否有计划尽快支持此功能?否则,我对这个特定用例有什么选择?
spring-boot - 如何在 Spring Cloud Gateway 中获取请求标头值
我正在使用spring cloud gateway实现API路由,在一个用例中,我需要从传入请求中获取标头值并将其用于某些处理,进一步将此处理后的值作为标头添加到传出(路由)API调用中。如何从 routeBuilder 中的传入 API 调用中获取标头值?
spring-boot - 无法根据活动的 Spring 配置文件生成不同的 spring-cloud-gateway 路由
我正在尝试使用 Spring 配置文件在 Spring Cloud Gateway 中定义不同的路由。我读过的所有关于 Spring 如何使用 yaml sems 管理配置文件以表明它应该工作的内容,但对于我的生活来说,它只是......似乎没有。(我的其他 Spring 应用程序使用属性,所以我不习惯 yaml 配置——我可能遗漏了一些东西。)
实际上,我要做的是拥有一个“prod”配置文件,其中包含我的生产服务器的 URI,以及一个包含 localhost 等效项的“dev”配置文件。
我有两个配置文件,dev 和 prod。我的application.yml
文件看起来像这样
我的理解如下:
- 该
spring.profiles.default
属性告诉 Spring,如果没有指定配置文件,则使用 prod 配置文件 - Spring 会将 视为
---
“文件分隔符”并重新评估每组属性并在spring.profiles
参数评估为 true时覆盖以前的值
鉴于这种理解,我希望 Spring 首先解析“默认”属性,了解默认激活的配置文件应该是 prod。然后它将解析产品属性。由于“prod”是一个活动配置文件(唯一的活动配置文件,是默认配置),它应该解析和应用 prod 路由。然后它会解析 dev 路由,但会识别 dev 不是活动配置文件,并且不会覆盖这些值。这是我阅读有关如何根据环境更改配置的文档的理解。
然而,当我加载它时,我点击了执行器端点——/actuator/gateway/routes
我回到[]
了我希望看到 prod 路线的地方。我确实在我的日志中看到 prod 配置文件已激活,但似乎顶部的“默认”部分中没有属性会导致当解析器从配置文件部分读取它们时不会应用它们。
我尝试的另一件事是将“dev”属性作为默认值,然后尝试使用“prod”配置文件属性覆盖 URI。那里发生了类似的问题——我点击了执行器端点并返回了路由,但它们只是默认的开发者。
如何利用 Spring 配置文件在 application.yml 中配置不同的 Spring Cloud Config 路由?
版本:
- spring-cloud-gateway 2.0.1.BUILD-SNAPSHOT (获得此错误的解决方法,可能不相关)
- spring-cloud-starter-gateway
- spring-boot 2.0.3.RELEASE
- spring-boot-starter-webflux
- 弹簧引导启动器执行器
(由于政治原因,我不能使用 Spring Cloud Config。我公司的首席架构师患有严重的 Not Invented Here Syndrome。)
spring-cloud-gateway - Spring Cloud Gateway - 请求体
是否可以根据请求正文中的参数进行路由?
就像是
如果是这样,这将如何实现?
任何帮助都非常受欢迎。