Spring cloud gateway 升级到Hoxton.SR12之后,在Token验证的filter里,通过openfeign调用User Auth服务时,碰到如下错误:
java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-3 at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:83) Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Error has been observed at the following site(s): |_ checkpoint ⇢ net.hzwei.spc.gateway.filter.CrossDomainFilter [DefaultWebFilterChain] |_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain] |_ checkpoint ⇢ org.springframework.cloud.sleuth.instrument.web.TraceWebFilter [DefaultWebFilterChain] |_ checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain] |_ checkpoint ⇢ HTTP GET "/api/company/list" [ExceptionHandlingWebHandler] Stack trace: at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:83) at reactor.core.publisher.Mono.block(Mono.java:1685) at org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient.choose(BlockingLoadBalancerClient.java:86) at org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient.execute(FeignBlockingLoadBalancerClient.java:62) at org.springframework.cloud.sleuth.instrument.web.client.feign.TraceFeignBlockingLoadBalancerClient.execute(TraceFeignBlockingLoadBalancerClient.java:75) at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:119) at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:89) at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) at com.sun.proxy.$Proxy155.validToken(Unknown Source) at net.hzwei.spc.gateway.filter.TokenCheckFilter.checkToken(TokenCheckFilter.java:146) at net.hzwei.spc.gateway.filter.TokenCheckFilter.filter(TokenCheckFilter.java:95)
这是因为FeignResp<LoginUserResp> resp = authClient.validToken(vToken) 调用是同步调用,而SCG使用了Reactor开发的响应式组件,运用了大量的异步实现,所以需要将authClient.validToken(vToken)改为异步调用:
ThreadPoolExecutor exe = .....
Future<FeignResp<LoginUserResp>> future = exe.submit(() -> authClient.validToken(vToken));
FeignResp<LoginUserResp> resp = future.get(8, TimeUnit.SECONDS);
/////////////////////////////////////////////////////////////////////////
解决了同步/异步调用问题,又遇到如下错误:
java.util.concurrent.ExecutionException: feign.codec.DecodeException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:206)
这是因为Spring Cloud Gateway是基于WebFlux的,是ReactiveWeb,所不会自动注入以HttpMessageConverters实例,需要我们自己注入:
@Bean public feign.codec.Decoder decoder(){ return new ResponseEntityDecoder(new SpringDecoder(feignHttpMessageConverter())); } private ObjectFactory<HttpMessageConverters> feignHttpMessageConverter(){ HttpMessageConverters httpMessageConverters = new HttpMessageConverters(new MappingJackson2HttpMessageConverter()); return () -> httpMessageConverters; }
相关推荐
赠送jar包:spring-cloud-alibaba-sentinel-gateway-2021.1.jar; 赠送原API文档:spring-cloud-alibaba-sentinel-gateway-2021.1-javadoc.jar; 赠送源代码:spring-cloud-alibaba-sentinel-gateway-2021.1-sources...
Spring Cloud Gateway 是一款基于 Spring Framework 5 和 Spring Boot 2 设计的云应用入口网关。它提供了诸如路由、过滤器、动态路由等高级功能,是微服务架构中常见的组件。Sentinel 是阿里巴巴开源的一款流量控制...
在4G到5G的NSA场景下,如果X2链路超配,可能会阻碍5G SCG的建立,即4G基站无法将用户成功地“交接”给5G基站。 三、问题现象与原因分析 1. 用户在5G覆盖区域行驶时,4G锚点基站切换期间,5G网络信号消失,无法提供...
文档标题涉及的问题主要集中在4G到5G的非独立组网(NSA)模式下的网络切换,特别是关于4G锚点基站(即提供4G连接的主要基站)与5G站之间的X2链路超配问题,这导致了5G业务的掉线。以下是这个问题的详细分析和相关...
SCG Prism是一款专为开发者设计的聊天客户端与服务器端软件开发工具,主要基于.NET 2.0框架构建。这个解决方案提供了完整的基础设施,帮助开发者轻松地集成聊天功能和其他多用户消息传递服务到他们的应用程序中。 ...
本文档主要讨论了一个5G网络中的技术问题,即在NR接入后出现SCG(Secondary Cell Group)失败导致的掉话情况。这个问题出现在贵州省的一个特定站点——BY-轩辕山庄NHHO站点,由优化人员李拔任上报。问题的核心在于NR...
6. **监控与日志**:通过Consul的API,我们可以监控服务的注册与发现情况,同时SpringCloud Gateway的过滤器可以记录请求日志,便于系统监控和问题排查。 在`springcloudgateway-master`这个压缩包文件中,可能包含...
本文主要探讨了5G网络中一个特定的问题,即在NR接入后出现SCG(Secondary Cell Group)失败导致的掉话情况。这个问题出现在贵州省的一个名为BY-轩辕山庄的NHHO站点,由测试工程师李拔任上报。问题的核心在于5G终端在...
最后,文档中提到了一些参考资料和相关技术标准,例如《THE I2C-BUS SPECIFICATION》版本2.1,这是I2C协议的一个正式文档,由Philips公司于2008年发布。还有PCF8563的生产规格说明,这是一款常用的实时时钟/日历芯片...
"SCG"可能是“Spring Cloud Gateway”的简称,这是一个在Java生态系统中广泛使用的微服务网关。Spring Cloud Gateway作为Spring Cloud生态的一部分,旨在提供一种简单有效的方式来路由请求,并为微服务架构提供过滤...
2. **随机接入问题**:UE在接入NR小区时遇到困难。 3. **RLC达到最大重传次数**:数据传输失败多次后,会导致SCG Failure。 4. **与SCG同步失败**:通常由于T304超时引起。 5. **SCG配置失败**:配置错误导致连接...
FW-SCG锐捷-防火墙配置模块.pdf
在5G网络优化和案例分析的背景下,我们聚焦于华为Mate30系列手机在尝试接入5G网络时遇到的问题——无法添加SCG(System Component Group,系统组件组)。SCG在5G网络中扮演着至关重要的角色,它涉及到5G NR(New ...
本文主要探讨了5G接入失败,特别是由于SCG(Split Control Plane)添加被拒绝的问题,以及如何进行故障排查和优化。SCG添加是5G NSA(Non-Standalone)组网模式下,终端从LTE网络接入5G网络的关键步骤。以下是针对这...
SCG添加成功率是指在4G到5G的连接过程中,终端成功建立SCG的比例,它是衡量5G网络性能的重要指标。优化SCG添加成功率有助于提高用户在5G网络中的接入质量和效率。 一、功能描述 1.1 SCG功能 SCG功能允许终端在4G和...
5G网络优化是确保通信质量的关键环节,尤其是在5G SCG(Split Control Plane)添加成功率方面,这直接影响到用户在4G与5G之间切换的效率和稳定性。SCG(Split Control Plane)模式是EN-DC(Enhanced Mobile ...
【5G优化案例:5G SCG辅站变更成功率专项优化】 在5G网络中,Non-Standalone (NSA) 组网模式下,SCG (Split Control Plane and User Plane) 辅站变更成功率是衡量网络性能的重要指标之一。SCG变更主要包括站内SCG...
本文主要探讨了在5G接入过程中遇到的问题,特别是SCG(Seamless Carrier Group,无缝载波组)添加被拒绝导致的接入失败情况,并通过两个具体案例进行了深入分析。SCG添加是NSA(非独立组网)模式下5G接入的关键步骤...
如文档中提到的【合肥电信室分站点XY-HF-市区-滨湖国际会展中心9号馆交通安全博览会-5G-1000107-4小区】,在该区域,UE在接入5G时遇到问题,无法显示5G图标,也无法进行5G业务。 【问题分析】经过一系列排查,包括...