我对波莉很陌生。我做了一些研究,但仍然无法确定是否/如何以一种优雅的方式使用Polly仅在请求失败时才使用chached值。示例:
服务A希望通过http从服务B获取数据。我一直想获取最新数据(几分钟的缓存策略就可以了)。但是,如果服务B关闭,只要该服务不可用,我希望能够使用缓存的数据。
仅使用Polly缓存似乎无法解决问题。但是,当仅在回退情况下使用高速缓存时,它不会被最新值填充,因为在发生故障之前会绕过最新值。你明白我的意思吗? THX
[每当我们谈论弹性策略时,我们主要是指弹性模式的组合。换句话说,为了解决您的问题,您需要(以正确的顺序)束缚一些民警,以便能够解决它。 (在polly命名法中,它称为wrapping)
首先让我们收集模式:
我建议使用措词暂时不可用/无法到达,因为这意味着您要使用弹性策略来克服瞬态故障。因此,为了检测服务不可用,您可以使用Circuit Breaker。它的工作方式如下:该组件充当代理并检查请求的结果(如果有)。在预定数量的[[成功/后续失败之后,它将在给定时间段内阻止与下游系统的通信。该时间段过后,您可以尝试一下,看看新请求是成功还是失败。
在这里值得一提的是,只要代理阻止传出请求以满足快速失败原理],Polly都会抛出BrokenCircuitException
。
使用后备
这里的顺序很重要,因为Polly使用
升级
来链接策略。当内部策略失败时,它将升级为外部策略。根据您的情况,顺序将是这样的(从外到内):Fallback >>缓存>>断路器
当然,您甚至可以通过使用Timeout和Retry来增强它。在这种情况下,排序如下所示:回退>>缓存>>重试>>断路器>>超时