我是靠谱客的博主 强健电源,这篇文章主要介绍spring cloud gatway, Hystrix post请求没有正确的回调场景: 异常情况: 异常原因: 解决:,现在分享给大家,希望可以做个参考。

场景:


通过 Hystrix 在网关中控制接口的请求响应时间,当超时时返回一个默认的返回值
配置大概如下:

- name: Hystrix
  args:
    name: retrycmd
    fallbackUri: forward:/retryFallback


异常情况:


该配置在 GET 请求时一切都正常,但在POST就会出现异常,不回调
异常信息大概如下: 意思大概是找不到回调的方法

retrycmd timed-out and fallback failed.


异常原因:

经过各种跟踪,发现原来是因为 webFlux 本身的跨域验证的问题
请求POST接口时,会进行跨域验证,
CorsUtils.isSameOrigin 方法抛出了一个新的异常
异常信息是 :"Actual request scheme must not be null"

出现了异常套娃现象,导致无法进入到回调中

github 也有人碰到了类型的问题
https://github.com/spring-cloud/spring-cloud-gateway/issues/593
https://github.com/spring-cloud/spring-cloud-gateway/issues/677


解决:


思路:重载跨域验证方法;

自定一个 RequestMappingHandlerMapping,然后覆盖默认的 DefaultCorsProcessor;

代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@Configuration(com.htcf.frame.Constants.FRAME_BEAN_PREFIX + "WebFluxConfig") @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE) @ConditionalOnClass(WebFluxConfigurer.class) public class WebFluxConfig implements WebFluxRegistrations{ private ReactiveRequestMappingHandlerMapping reactiveRequestMappingHandlerMapping = null; @Override public RequestMappingHandlerMapping getRequestMappingHandlerMapping() { return reactiveRequestMappingHandlerMapping(); } //@Bean public ReactiveRequestMappingHandlerMapping reactiveRequestMappingHandlerMapping() { if(reactiveRequestMappingHandlerMapping == null ) { reactiveRequestMappingHandlerMapping = new ReactiveRequestMappingHandlerMapping(); reactiveRequestMappingHandlerMapping.setCorsProcessor( new EmptyDefaultCorsProcessor() ); } return reactiveRequestMappingHandlerMapping; } class ReactiveRequestMappingHandlerMapping extends RequestMappingHandlerMapping{ @Override protected boolean isHandler(Class<?> beanType) { return super.isHandler(beanType) && !beanType.isInterface(); } } class EmptyDefaultCorsProcessor extends DefaultCorsProcessor { @Override public boolean process(CorsConfiguration config, ServerWebExchange exchange) { return true; } } }

 

最后

以上就是强健电源最近收集整理的关于spring cloud gatway, Hystrix post请求没有正确的回调场景: 异常情况: 异常原因: 解决:的全部内容,更多相关spring内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部