如何正确处理hystrix后备广告中的预期错误?

约翰:

我们有一个Hystrix(1.4.x)命令,如下所示(使用Spring):

@HystrixCommand(groupKey = "GroupKey", commandKey = "CommandKey", fallbackMethod = "myFallback")
public List<X> findXs(long xId) {
   return externalService.findXsExternally(xId);
}

实际上,我们不希望List从fallback方法返回一个(空),而是抛出一个异常,以便我们的调用者findXs知道the externalServicedown并可以采取相应的措施。但与此同时,我们想利用Hystrix提供的功能。在我们的例子中,我们希望调用者返回错误消息而不是返回列表。在Spring中,回退的实现方式如下:

public List<X> myFallback(long xId) {
    // What to do?? Throw exception!?  
}

myFallback“作品”中抛出异常,但Hystrix将警告我们:

CommandKey失败,回退失败。

即它将解释为回退失败。在我们的情况下,异常应被解释为后备失败而是预期的行为。我们还尝试了将抛出的异常包装在中,HystrixBadRequestException但它似乎不适用于后备(根据文档,该方法适用于“运行”方法)。

如何在Hystrix中实现抛出异常的后备方法?我们可以安全地忽略警告吗,还是Hystrix并非以这种方式设计的?

卫生

如果不想使用后备,为什么要设置后备呢?Hystrix不需要您设置一个。当您宁愿从缓存中返回陈旧数据(而不是引发异常)时,可以使用后备。两种情况都视为Hystrix的失败。如果要从fallback方法引发异常,则只会混淆Hystrix,后者会认为除了服务本身之外,fallback还存在错误。如果您不提供后备广告,则Hystrix应该引发HystrixBadRequestException,包装从findXs方法引发的异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章