当前位置:首页 > 数码 > Cloud-body-中读取-时的经常出现疑问-Spring-Gateway-彻底处置 (cloud-based)

Cloud-body-中读取-时的经常出现疑问-Spring-Gateway-彻底处置 (cloud-based)

admin5个月前 (04-29)数码25

在构建微服务架构时,SpringCloudGateway作为一个关键的微服务网关,经常须要在过滤器(Filter)中对POST恳求的Body内容启动操作,如日志记载、签名验证和权限验证等。但是,因为Request的Body只能读取一次性,假设间接在过滤器中读取而不启动封装,或者造成后续服务不可失掉数据。

网上搜这个疑问的处置打算,大少数文章都是通知你写一个Filter将Request的Body缓存起来。这种方法确实可以,只不过须要对代码经过充沛压力测试,否则很有或者产生如下所示的堆外内存溢出疑问。

reactorty.ReactorNetty$InternalNettyException:io.netty.util.internal.OutOfDirectMemoryError:fledtoallocate
Gateway

实践上,SpringCloudGateway曾经内置了AdaptCachedBodyGlobalFilter过滤器,它在Exchange中奇妙地缓存了Request的Body,防止了间接读取造成的一系列疑问。这种形式更为稳当,防止了潜在的内存溢出危险。

图片

在须要失掉Body的中央,咱们只有要经过以下方法即可:

DataBufferbody=exchange.getAttributeOrDefault("cachedRequestBody",null);StringbodyStr=body.toString(StandardCharsets.UTF_8);

只不过经过源码可以看出,缓存RequestBody须要路由被标志为须要缓存,也就是this.routesToCache.containsKey(rouceId)方法肯定前往true。

AdaptCachedBodyGlobalFilter会监听EnableBodyCachingEvent事情,当颁布该事情时就将RouteId放入routesToCache中。为了繁难经常使用,咱们可以编写一特性能类,在初始化时颁布EnableBodyCachingEvent事情,将一切路由都启用缓存性能。

@Configuration(proxyBeanMethods=false)@Slf4jpublicclassEnableCachedBodyConfiguration{@ResourceprivatelicationEventPublisherpublisher;@ResourceprivateGatewayPropertiesgatewayProperties;@PostConstructpublicvoidinit(){gatewayProperties.getRoutes().forEach(routeDefinition->{//对springcloudgateway路由性能中的每个路由都启用AdaptCachedBodyGlobalFilterEnableBodyCachingEventenableBodyCachingEvent=newEnableBodyCachingEvent(newObject(),routeDefinition.getId());publisher.publishEvent(enableBodyCachingEvent);});}}

经过这种形式,咱们可以愈加繁难地处置POST恳求的Body内容,防止了一些经常出现的疑问。在实践运行中,思考到稳固性和性能,这种处置打算提供了一种更为牢靠的选用。


springcloudgateway怎么故障转移

在SpringCloudGateway中实现故障转移通过以下步骤进行操作:1、配置服务注册和发现确保你的微服务已经注册到服务注册中心,例如Eureka或Consul。 这将使Gateway能够发现可用的服务实例。 2、配置负载均衡:在Gateway的路由配置中,使用负载均衡器来分发请求到多个服务实例。 SpringCloudGateway默认集成了Ribbon作为负载均衡器,你可以使用`LoadBalancerClient`来实现负载均衡。 3、配置熔断器:为了实现故障转移,你可以在Gateway中使用熔断器来处理故障的服务。 SpringCloudGateway集成了Resilience4j和Hystrix作为熔断器,默认使用Resilience4j。 你可以在路由配置中添加熔断器的相关配置,例如设置熔断器的阈值、超时时间等。 4、配置降级策略:如果某个服务发生故障,你可以在Gateway中配置降级策略,返回一个默认的响应或者转发到备用的服务。 你可以使用`fallbackUri`属性来指定降级的路由。 5、监控和告警:为了及时发现故障和进行故障转移,你可以使用监控和告警工具来监控Gateway和后端服务的状态。 SpringCloudGateway集成了SpringBootActuator,你可以通过Actuator来暴露监控和健康检查的端点。

springcloudgateway更新不及时

springcloudgateway更新不及时办法:1、gateway正常将/test/hello转发至服务A。 2、在nacos管理端让服务A下线。 3、立刻访问不停/test/hello。 4、最初几秒内发现gateway还是会把流量打到服务A。 5、之后正常响应。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Spring

“Cloud-body-中读取-时的经常出现疑问-Spring-Gateway-彻底处置 (cloud-based)” 的相关文章

概念-Spring-AOP-实现原理和应用-中的 (概念股股票)

概念-Spring-AOP-实现原理和应用-中的 (概念股股票)

什么是AOP? AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,其主要目的是将横切关注点(cross-cutting concern)从主要业务...

比如每日有大量用户访问和数据替换-服务器的带宽需求与网站的访问量密切相关-那么就须要更大的带宽来满足需求-访问量-假设你的网站流量大 (比如每日有大事的句子)

比如每日有大量用户访问和数据替换-服务器的带宽需求与网站的访问量密切相关-那么就须要更大的带宽来满足需求-访问量-假设你的网站流量大 (比如每日有大事的句子)

SpringBeanDefinition元信息定义形式 BeanDefinition是一个蕴含Bean元数据的对象。它形容了如何创立Bean实例、Bean属性的值以及Bean之间的依赖相关。...

事务传播行为-Spring-七种类型一览 (spring事务传播行为)

事务传播行为-Spring-七种类型一览 (spring事务传播行为)

简介 Spring 事务传播性是指在 Spring 环境中,当多个包含事务的方法嵌套调用时,每个事务方法如何处理事务上下文中的提交或回滚行为。 传播性行为 Spring 中定义了 7 种事...

极致便当与卓越容错-Topic-Spring-重试-成功-运用-Kafka (极致餐是什么意思)

极致便当与卓越容错-Topic-Spring-重试-成功-运用-Kafka (极致餐是什么意思)

概述 Kafka的弱小性能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条信息的值。可以智能或手动参与该值。假设咱们因为失误而不可处置信息并想重试,咱们可以选用...

Spring-Webflux-Boot-虚构线程性能逊色于-深化比较 (springboot)

Spring-Webflux-Boot-虚构线程性能逊色于-深化比较 (springboot)

早上看到一篇关于SpringBoot虚构线程和Webflux性能对比的文章,感觉还不错。内容较长,抓重点给大家引见一下这篇文章的外围内容,繁难大家极速浏览。 测试场景 作者驳回了一个尽...

揭秘-的暗藏技艺-AOP-从概念到实用场景-Spring (神秘丂丂是什么意思)

揭秘-的暗藏技艺-AOP-从概念到实用场景-Spring (神秘丂丂是什么意思)

环境:Spring5.3.23 1.引见 当天看Spring文档看到这么一个常识点《ControlFlowPointcuts》都不好翻译 官网原文: Springcontr...

Spring-Boot-Starter原理详解-b-b (springernature)

Spring-Boot-Starter原理详解-b-b (springernature)

SpringBoot Starter 是一种包含了一组特定功能和依赖关系的依赖项,旨在为特定的应用程序场景提供快速集成和开箱即用的功能。主要用于将常用的功能模块打包成一个可重用的依赖项,开发者只需...

容器启动有效的交互-Spring-如何利用-框架提供的才干-让-Bean-深化了解并与-Spring (容器启动过程)

容器启动有效的交互-Spring-如何利用-框架提供的才干-让-Bean-深化了解并与-Spring (容器启动过程)

Spring有一个特点,就是创立进去的Bean对容器是无感的,一个Bean是怎样样被容器从一个Class整成一个Bean的,关于Bean自身来说是不知道的,当然也不须要知道,也就是Bean对容器的...