spring-cloud / spring-cloud-gateway

An API Gateway built on Spring Framework and Spring Boot providing routing and more.
http://cloud.spring.io
Apache License 2.0
4.52k stars 3.32k forks source link

rateLimit by redis acquired requestbody is null #1009

Closed shuliu8 closed 5 years ago

shuliu8 commented 5 years ago

eurekaserver-demo.zip service-demo.zip springcloudgateway-demo.zip

as the sample; i want to do pressure test with RateLimiterGatewayFilterFactory,when i run GateWayClientTest.testMultiThreadClient,sometimes get request body is NULL, but sometimes could acquire correct requestbody;

parts of log: LoggingFilter.filter:41) - LoggingFilter global filter start RealtimeAuditRequestRateLimiterGatewayFilterFactory.lambda$apply$1:55) - request body={"stageCode":"STAGE000002"} LoggingFilter.lambda$filter$0:45) - LoggingFilter global filter end LoggingFilter.lambda$filter$0:48) - /realtime/post-audit: 97ms LoggingFilter.filter:41) - LoggingFilter global filter start ilter.RealtimeAuditRequestRateLimiterGatewayFilterFactory.lambda$null$0:72) - RealtimeAuditRequestRateLimiter gateway filter end RealtimeAuditRequestRateLimiterGatewayFilterFactory.lambda$apply$1:55) - request body={"stageCode":"STAGE000002"} allback.FallbackController.fallback:17) - in fallback method,req={"stageCode":"STAGE000002"} LoggingFilter.filter:41) - LoggingFilter global filter start RealtimeAuditRequestRateLimiterGatewayFilterFactory.lambda$apply$1:55) - request body=null RealtimeAuditRequestRateLimiterGatewayFilterFactory.setRateCheckResponse:105) -response={"respMessage":"reject","riskStatus":"R"} LoggingFilter.lambda$filter$0:45) - LoggingFilter global filter end LoggingFilter.lambda$filter$0:48) - /realtime/post-audit: 11ms LoggingFilter.lambda$filter$0:45) - LoggingFilter global filter end LoggingFilter.lambda$filter$0:48) - /realtime/post-audit: 61ms ilter.RealtimeAuditRequestRateLimiterGatewayFilterFactory.lambda$null$0:72) - RealtimeAuditRequestRateLimiter gateway filter end allback.FallbackController.fallback:17) - in fallback method,req={"stageCode":"STAGE000002"} LoggingFilter.lambda$filter$0:45) - LoggingFilter global filter end LoggingFilter.lambda$filter$0:48) - /realtime/post-audit: 32ms LoggingFilter.filter:41) - LoggingFilter global filter start RealtimeAuditRequestRateLimiterGatewayFilterFactory.lambda$apply$1:55) - request body=null RealtimeAuditRequestRateLimiterGatewayFilterFactory.setRateCheckResponse:105) -response={"respMessage":"reject","riskStatus":"R"} LoggingFilter.lambda$filter$0:45) - LoggingFilter global filter end LoggingFilter.lambda$filter$0:48) - /realtime/post-audit: 5ms LoggingFilter.filter:41) - LoggingFilter global filter start RealtimeAuditRequestRateLimiterGatewayFilterFactory.lambda$apply$1:55) - request body={"stageCode":"STAGE000002"}

ryanjbaxter commented 5 years ago

Can you tell us how to use the samples to reproduce the issue?

shuliu8 commented 5 years ago

QQ图片01 gatewaydemo.log maybe you need replace the redis config to yourselfs, thanks

shuliu8 commented 5 years ago

is anyone can help,thanks

ryanjbaxter commented 5 years ago

Can you tell us how to use the samples to reproduce the issue?

TYsewyn commented 5 years ago

The cause of this issue resides within RealtimeAuditRequestRateLimiterGatewayFilterFactory. In the resolveBodyFromRequest method you're subscribing on the body of the request which causes these "null" values. Therefor I'm closing this issue.