spring cloud gateway收到请求后报Only one connection receive subscriber allowed 20C

代码框架

前端代码采用vuejs框架,并且使用了proxymiddlware做代理
服务端代码采用springboot编写并使用了consul服务发现、spring cloudg ateway做网关。

现在的情况是这样,可以通过网关访问后台的swagger-api页面,并且可以正常发送请求测试,返回也正常,但是当在前端配置好网关调用后,从前端页面发送请求后页面直接显示连接失败,spring cloud gateway服务报java.lang.IllegalStateException: Only one connection receive subscriber allowed,从网上搜索后大概意思是请求body只能被获取一次,下面是完整异常

    2018-09-20 10:30:54.952 ERROR 13772 --- [ctor-http-nio-2] .a.w.r.e.DefaultErrorWebExceptionHandler : Failed to handle request [POST http://127.0.0.1:8088/gacenter/api/v1/login]

java.lang.IllegalStateException: Only one connection receive subscriber allowed.
    at reactor.ipc.netty.channel.FluxReceive.startReceiver(FluxReceive.java:279) ~[reactor-netty-0.7.9.RELEASE.jar:0.7.9.RELEASE]
    at reactor.ipc.netty.channel.FluxReceive.lambda$subscribe$2(FluxReceive.java:129) ~[reactor-netty-0.7.9.RELEASE.jar:0.7.9.RELEASE]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:163) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:446) ~[netty-transport-4.1.29.Final.jar:4.1.29.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]
    at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_60]

那位大神遇到过这个问题,路过还请留名

0

2个回答

实际上spring-cloud-gateway反向代理的原理是,首先读取原请求的数据,然后构造一个新的请求,将原请求的数据封装到新的请求中,然后再转发出去。然而我们在他封装之前读取了一次request body,而request body只能读取一次。因此就出现了上面的错误。
解决思路:读取request body的时候,我们再封装一次request,转发出去

0
weixin_40420213
哪托的轮滑鞋 我之前也看过一个关于Spring-webflux编程中body只能获取一次的问题解决方案https://blog.csdn.net/lz710117239/article/details/80651361但是,我在下面的代码中还是获取不到bodyref,您帮我检查下有问题吗
9 个月之前 回复
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
spring cloud api gateway简介
讲得很不错的一段,驰狼的 spring cloud api gateway 简介
web开发中的跨域问题
一.为什么会有跨域问题? 1.浏览器限制 2.跨域 域名,端口,协议任意一个不相同; 3.XHR(XMLHttpRequest)请求   满足以上三个条件才会触发跨域,任意一个不满足就不算是跨域; 二.解决跨域问题的方法 针对上边三中种方式,让其不满足上边的条件即可; 1.浏览器解除安全设置,这种方式需要修改客户端的浏览器,另外此种方式也不安全,不方便也不建议这样设置; 2.将...
springcloud gateway代理get正常、post请求报错的问题
在上一篇时,我们在使用gateway的反向代理功能时,发现了一个很严重的问题,那就是通过gateway去访问后端服务时,如果发起的是Get请求,就一切正常,如果是Post请求,就会报错。无论是使用什么filter。 java.lang.IllegalStateException: Only one connection receive subscriber allowed. at react...
springboot 网关gateway选型分析
用 Spring Cloud 微服务实战中,大家都知道用 Zuul 作为智能网关。API 网关(API Gateway)主要负责服务请求路由、组合及协议转换。下面是大家的总结:一、最佳回答网关的技术选型SpringCloud-Zuul :社区活跃,基于 SrpingCloud 完整生态, 是构建微服务体系前置...
Spring cloud gateway 踩坑实录——端口之坑、配置代理远端WS服务时报404,403之坑
先贴上解决方案吧,一下简称Spring cloud gateway 为SCG server: port: 8000 spring: cloud: gateway: routes: - id: https uri: https://www.zhaoxu4java.com/-/x/pro/market/overview pr...
spring cloud gateway转发服务报错。
错误如下: javax.net.ssl.SSLHandshakeException: error:1000009c:SSL routines:OPENSSL_internal:HTTP_REQUEST   在spring cloud gateway项目中,使用了SSL验证后,为了增加系统性能,引入了netty-tcnative-boringssl-static依赖来增加性能后,在项目中一些h...
学习Spring Cloud第十三课(解决第一次访问报超时的问题)
在前几节课我们第一次访问http://localhost:8010/movie/1这个地址的时候经常会看到超时错误,这个错误其实是因为feign集成了hystrix,而hystrix默认的超时时间是1秒,如果我们的请求超过了1秒,那么就会报超时错误。        针对这种情况,有三种方法可以解决:        在microservice-simple-consumer-movie-feig
springcloud正常启动但是访问报404的错误,springcloud的一大个大坑
一 spring boot的启动类不能直接放在main(src.java.main)这个包下面,把它放在有包的里面就可以了。 二 正常启动了,但是我写了一个controller ,用的@RestController 注解去配置的controller,然后路径也搭好了,但是浏览器一直报404.最后原因是,spring boot只会扫描启动类当前包和以下的包  。 如果将 spring boot 放在...
springcloud gateway 解决请求接口的响应报文内容不全或者错误的方案
Springcloud默认的返回内容格式为HTML,但我们微服务系统之间的调用格式通常为json格式,对于post请求,有时后响应的报文为JSON的时候就报错,接口测试的时候通常返回如下错误:<Not JSON content> 但通过查看html报文时 确实有响应内容,只是内容不全,json体只显示了一部分,存在丢失问题。解决此问题的方式就是修改原始响应内容的参数设置。重新设置he...
Sping-Cloud使用BUG-01-网关超时
使用BUG-01-网关超时 BUG场景 是酱紫的,使用的时候,请求过网关到微服务,2秒以内的请求没有问题,超过的就报超时,【zuul就熔断了】 BUG报错 zuul 报错:timed-out and no fallback available,failed and no fallback available com.netflix.zuul.exception.ZuulExcep...
springcloud gateway 获取post请求的请求体和返回的响应内容
1. 获取post请求的下游微服务返回的响应内容: import java.nio.charset.Charset; import org.reactivestreams.Publisher; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.g...
spring cloud gateway 格式化异常输出
/** * 自定义异常处理 * 解决问题: * 1 统一网关响应消息格式"{\"status\":" + httpStatus + ",\"message\": \"" + message + "\"}" * 2 特殊异常处理,不让其直接抛往前端,比如feign调用过程,某些服务不可用“syscall:getsockopt(..) failed: 拒绝连接: /******:113
SpringCloud Gateway Https设置 以Http 转发 路由 给后台微服务
Spring Cloud  Gateway接收到https请求,根据路由规则转发给后台微服务,但是默认情况下,转发给后台微服务时,仍然是https请求,这就要求后台微服务需要配置ssl,并且每台服务器都需要有域名,这名下是不太实际的,正常情况下,一个网站只有对外拍路的网关是通过域名访问,转发给后台微服务时,则是采用IP地址。 SpringCloud  Zuul默认情况下就会帮我们实现https转...
spring-cloud http认证 问题小记
项目环境 项目采用spring-cloud方案。利用eureka做服务注册发现,通过zuul反向代理到具体的服务,处理用户请求。 描述 根据需求,需在spring-boot服务指定路径上加一个http认证。 pom.xml中配置: dependency> groupId>org.springframework.bootgroupId> artifactId>spr
SpringCloud Gateway的基本入门和注意点
1.gateway和zuul Spring Cloud Finchley版本的gateway比zuul 1.x系列的性能和功能整体要好,且使用 Gateway 做跨域相比应用本身或是 Nginx 的好处是规则可以配置的更加灵活. 这两者相同的地方就是都是作为网关,处理前段的请求,可以进行路由到对应的服务或者url,也可以针对权限做过滤处理,也可以对其他服务响应的结果做处理 https://clou...
学习-SpringCloudZuul gateway转发静态资源问题
一、问题描述 使用SpringBoot开发微服务应用时,使用Zuul开发API gateway,进行鉴权和验证,第一次配置路由之后,加载到页面发现没有获取静态资源文件,如下: zuul.routes.testweb.path=/page/** zuul.routes.testweb.url=http://localhost:8080/page 二、解决方法 此问题主要针对添加了类或项目映...
spring cloud学习笔记4(请求合并处理)
微服务架构中的依赖通过远程调用实现,而远程调用中最常见的问题就是通信消耗与连接数占用。在高并发的情况下,因通信次数的增加,总的通信时间消耗将会变得不那么理想。同时,因为依赖服务的线程池资源有限,将出现排队等待与相应延迟的情况,为了优化这个两个问题,Hystrix提供啦HystrixCollapser来实现请求的合并,以减少通信消耗和线程数的占用。  HystrixCollapser实现了在Hys
SpringCloud 服务网关路由规则的坑
一、场景简述 笔者最近用到SpringCloud 服务网关的时候,进行服务网关的路由测试,发现无法路由自己设置的规则,测试的时候如下 通过错误排查发现,原来是路由规则写错了! 路由规则如下(错误) #端口 server: port: 8080 spring: #该配置文件中的配置,对应的服务名称是wc-gateway application: name: wc-g...
Spring Cloud(三) :微服务网关(Zuul)
在一个实际业务当中通常都会调用多个服务接口,而每个服务接口的ip/端口or域名都不一样,这样在实际调用中会变得十分繁琐,而且当服务接口ip/端口or域名修改后,业务系统也需要进行相应的修改,大大增加了开发维护成本,所以一般的做法都是在多个服务接口上游再添加一层,我们通常称之为网关。网关能够实现多种功能,比如反向代理,负载均衡,拦截器。在拦截器中我们还可以实现身份验证,反网络爬虫等等功能。 在Spr...
spring cloud gateway在请求中增加参数
由于有需要ip的需求,所以在网关层增加ip参数统一传给后端服务 package net.youqu.micro.service.filter; import net.youqu.micro.service.utils.IpUtil; import org.springframework.cloud.gateway.filter.GatewayFilter...
springcloud 跨域OPTIONS 请求+zuul网关+zuulFilter 使用不当导致系统访问不了,系统奔溃的原因。
当访问子微服务时候,如果存在跨域问题,浏览器会默认发送一个OPTIONS欲请求。验证通过后才会调用真正的接口。如果使用zuul调用接口,并且使用到zuulFilter时,在处理逻辑中需要注意如下几点:1:在向客户端返回数据时,不要对response直接操作,通过RequestContext API来操作。2:对特殊的请求做不同的处理,如OPTIONS     比如:在使用zuulFilter做身份...
spring cloud gateway跨域实现
spring cloud gateway是一个spring提供的用于构建网关的子项目,文档内容主要是实现网关跨域。
SpringCloud网关修改请求头使微服务获取客户端真实ip
1.网关添加过滤器: import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Component; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.Reque...
spring-cloud服务网关中的Timeout设置
大家在初次使用spring-cloud的gateway的时候,肯定会被里面各种的Timeout搞得晕头转向。hytrix有设置,ribbon也有。我们一开始也是乱设一桶,Github上各种项目里也没几个设置正确的。对Timeout的研究源于一次log中的warningThe Hystrix timeout of 60000 ms for the command “foo” is set lower...
Spring Cloud 系列之 Spring cloud gateway 实现网关路由转发和过滤功能
       在Spring boot2.0版本发布之后,spring cloud又集成和开发了很多新的模块和功能;spring boot2.0和spring boot1.5的差别可以说是很大了。今天介绍一些spring cloud gateway,spring cloud自己的网关,在1.x版本中,大家使用的较多的是Zuul网关,但Zuul只是Spring cloud整合Netflix的,并不是...
Spring Cloud使用Bus的refresh刷新配置文件报异常错误
Spring Cloud使用Bus的refresh刷新配置文件报异常: Caused by: java.lang.IllegalStateException: The configuration of the pool is sealed once started. Use HikariConfigMXBean for runtime changes. at com.zaxxer.hikari....
「性能优化之道」每秒上万并发下的Spring Cloud参数优化实战
一、写在前面 相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这是非常火的一门技术。 如果只是用户量很少的传统IT系统,使用Spring Cloud可能还暴露不出什么问题。 如果是较多用户量,高峰每秒高达上万并发请求的互联网公司的系统,使用Spring Cloud技术就有一些问题需要注意了。 二、场景引入,问题初现 先不空聊原理、理论,来讲一个真实的例子...
springcloud常见错误
Unsatisfied dependency expressed through field feign 接口参数注解RequestParam(“userName”)没加名字,即RequestParam get方式不能传对象 mybatisplus,mybatis 会默认链接数据库 需要配置datasource,4属性 Required String parameter ‘user...
通过springcloud-gateway调用后台服务超时的问题
最近有个接口需要从后台下载文件,下载请求会经过gateway,但是经过gateway一直都是超时的,debug了一下,发现超时时间默认是2秒。后来一直debug到源代码,发现要增加自己相应的配置来修改超时时间。 异常如下: { "timestamp": 1520236628339, "status": 500, "error": "Internal Server...
spring cloud实现优雅停机问题记录
公司的项目要做优雅停机,记录下遇到的一些坑,常规的就不写了。 环境: JDK1.8 spring cloud Daltson.RELEASE spring boot 1.5.8 1.只集成actuator,开放出shutdown端点是不够的,需要在关闭前处理好线程池中未结束的线程。否则还是暴力停机,线程被直接中断了,业务也无法完成。具体解决方案参考https://github.com/spri...
获取SpringCloud gateway 响应的response的值,可以查看、修改
gateway获取、修改客户端请求Request的参数,我们在上一篇已经讲过了。那么网关发起请求后,微服务返回回来的response的值,还是要经过网关才发给客户端的。很多时候,我们希望能看到响应的值,或者修改它。那么怎么做呢? import org.reactivestreams.Publisher; import org.springframework.cloud.gateway.filt...
spring-cloud常见问题集锦
eureka-server Whitelabel Error Page 创建eureka-server,在浏览器打开 http://localhost:8761/ Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback...
Spring Cloud Gateway真的有那么差吗?
Spring Cloud从一开始最受大家质疑的就是网关性能,那是由于Spring Cloud最初选择了使用Netflix几年前开源的Zuul作为基础,而高性能版的Zuul 2在经过了多次跳票之后,对于Spring这样的整合专家可能也不愿意再继续等待,Spring Cloud Gateway应运而生,那么这个由Spring社区自己开发推出的网关又如何呢?最近一篇《实测 | 转型微服务,这4大工具谁是
SpringCloudzuul转发webapp静态资源读取问题
SpringCloudzuul转发webapp静态资源读取问题问题需求网关静态资源配置解决方案 问题需求 公司项目部署要求做一个接口文档说明,项目采用springboot webapp编写好后,打算部署到通过网关zuul转发到此项目(相当于webapp文档项目变成了一个微服务),下面是webapp项目目录结构: 设置端口为9003 server.port=9003 网关静态资源配置 设置网关z...
springcloud zuul gateway 服务网关
springcloud zuul gateway 服务网关 http://knight-black-bob.iteye.com/blog/2357683
Spring Cloud 前后端分离后引起的跨域访问解决方案,springcloud
Spring Cloud 前后端分离后引起的跨域访问解决方案,springcloud 背景 Spring Cloud 微服务试点改造,目前在尝试前后端分离。 前台A应用(本机8080端口),通过网管(本机8769端口)调用后台应用B(本机8082端口)、应用C发布的http服务。。 A的js代码如下: $.ajax({ type: "P
springcloud zuul 修改转发传递的参数
在使用 springcloud zuul 进行转发请求到各个对应的服务中, 像 校验 请求权限之类的可以放 zuul的拦截器中,有些时候我们就需要增加或者减伤转发时带过去的对应的一些参数.贴增加转发参数的代码 public static void setReqParams() { RequestContext ctx = RequestContext.getCurrentCon...
Spring Cloud项目启动后报404错误
可能原因: 1.可能是端口不对 今天遇到的例子是最后看了console里的启动日志,才发现Intelij IDEA内嵌的Tomcat启动后再8081端口运行.
Kong Gateway - 18 基于网关服务的请求大小限制(Request Size Limiting)
Configure a Service in Kong[root@contoso ~]# curl -i -X POST \--url http://localhost:8001/services/ \--data 'name=book' \--data 'url=http://contoso.com/v1/books'HTTP/1.1 201 Created Date: Wed, 16 May ...
spring-cloud-gateway 集成 security 实现部分请求校验(基于WebFlux)
maven 引入: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency&gt
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 one区块链价格 报游戏开发培训班