Closed wangchen111 closed 2 years ago
@wangchen111 复现了下case,在SofaHystrixCommand会拿到自定义的fallback,然后代理调用,如下:
protected SofaResponse getFallback(SofaResponse response, Throwable t) {
FallbackFactory fallbackFactory = SofaHystrixConfig.loadFallbackFactory((ConsumerConfig) invoker.getConfig());
if (fallbackFactory == null) {
return super.getFallback();
}
Object fallback = fallbackFactory.create(new FallbackContext(invoker, request, response, t));
if (fallback == null) {
return super.getFallback();
}
try {
Object fallbackResult = request.getMethod().invoke(fallback, request.getMethodArgs());
SofaResponse actualResponse = new SofaResponse();
actualResponse.setAppResponse(fallbackResult);
return actualResponse;
} catch (IllegalAccessException e) {
throw new SofaRpcRuntimeException(LogCodes.getLog(LogCodes.ERROR_HYSTRIX_FALLBACK_FAIL), e);
} catch (InvocationTargetException e) {
throw new SofaRpcRuntimeException(LogCodes.getLog(LogCodes.ERROR_HYSTRIX_FALLBACK_FAIL),
e.getTargetException());
}
}
但是这里Object fallbackResult = request.getMethod().invoke(fallback, request.getMethodArgs());
其中method是泛化调用的方法,获取的request.getMethodArgs()和实际方法参数是不匹配的,导致这个问题。目前看泛化调用这块还不支持熔断降级。如果感兴趣可以一起看看如何修复这个问题。
@EvenLjj 感谢你的回复,我看一下
Your question
我在官网看到SOFARPC集成了Hystrix,支持熔断降级,我也按照文档实现了demo并测试通过了熔断降级功能,但是当我将调用方式改为泛化调用后,抛出了一些错误,不知道是我的实现方式有问题还是泛化调用不支持熔断降级呢 下面是我的demo代码:
下面是我的FallbackFactory实现
这是我遇到的错误
Your scenes
describe your use scenes (why need this feature)
Your advice
我希望知道泛化调用是否支持熔断降级,如果支持的话,能否提供相关使用示例
Environment
java -version
): jdk1.8uname -a
):