概述
场景:
通过 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;
代码:
@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 cloud gatway, Hystrix post请求没有正确的回调场景: 异常情况: 异常原因: 解决:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复