Java 如何正确处理Hystrix回退中的预期错误?

Java 如何正确处理Hystrix回退中的预期错误?,java,spring-boot,spring-cloud,hystrix,Java,Spring Boot,Spring Cloud,Hystrix,我们有一个Hystrix(1.4.x)命令,看起来像这样(使用Spring): 从myFallback引发异常“有效”,但Hystrix将警告我们: CommandKey失败,回退失败 也就是说,它会将此解释为后备故障。在我们的例子中,不应将异常解释为回退失败,而应解释为预期行为。我们还尝试将抛出的异常包装在hystrixbadderquestexception中,但它似乎不适用于回退(根据“运行”方法) 如何在Hystrix中实现异常抛出回退方法?我们可以安全地忽略警告,或者Hystrix不是

我们有一个Hystrix(1.4.x)命令,看起来像这样(使用Spring):

myFallback
引发异常“有效”,但Hystrix将警告我们:

CommandKey失败,回退失败

也就是说,它会将此解释为后备故障。在我们的例子中,不应将异常解释为回退失败,而应解释为预期行为。我们还尝试将抛出的异常包装在
hystrixbadderquestexception
中,但它似乎不适用于回退(根据“运行”方法)


如何在Hystrix中实现异常抛出回退方法?我们可以安全地忽略警告,或者Hystrix不是这样设计的吗?

如果您不想使用它,为什么要设置回退?Hystrix不需要您设置一个。当您希望从缓存返回过时数据之类的内容而不是抛出异常时,可以使用回退。这两种情况都被视为Hystrix的失败。如果您要从fallback方法抛出异常,您只会混淆Hystrix,Hystrix会认为除了服务本身之外,您的fallback还存在错误。如果不提供回退,Hystrix应该抛出一个HYSTRIxADREQUESTEXCEPTION,该异常封装从findXs方法抛出的异常。

但是,如果您有多个用@HystrixCommand注释的方法,您如何区分HystrixRuntimeException来自何处?我有一个问题,就是我希望根据哪个客户端有超时而采取不同的行为,但我唯一知道的是发生了HystrixRuntimeException。注释中有一个名为commandKey的属性。你可以把钥匙关上。我只是通过将它设置为ckey来测试它,下面是异常中的消息。。。ckey失败,回退失败。在异常本身中可能有更多的方法,请尝试一下并亲自查看
@HystrixCommand(groupKey = "GroupKey", commandKey = "CommandKey", fallbackMethod = "myFallback")
public List<X> findXs(long xId) {
   return externalService.findXsExternally(xId);
}
public List<X> myFallback(long xId) {
    // What to do?? Throw exception!?  
}