可以跳过Micronaut断路器输入某些HTTP状态代码吗?

问题描述

有没有一种方法可以配置Micronaut断路器,使其不会为特定的HTTP状态代码打开?例如,如果我在某个项目上进行查找而未找到该项目,则服务器可能会返回HTTP状态404。这可能是一个非常有效的响应,并且在这些情况下我不希望断路器打开。>

据我了解,Micronaut断路器与HTTP无关,但是仍然有一种解决方案可以将我带到那里:

@Client("${myEndpoint}")
@CircuitBreaker(attempts = "4",predicate = ServerErrorRetryPredicate.class)
public interface MyClient {
    @Get
    Single<MyItem> getItem(int itemId);
}

public class ServerErrorRetryPredicate implements RetryPredicate {
    @Override
    public boolean test(Throwable throwable) {
        if (throwable instanceof HttpClientResponseException) {
            HttpClientResponseException e = (HttpClientResponseException) throwable;
            return e.getStatus().getCode() >= 500;
        }
        return true;
    }
}

这里我使用的是Micronaut 2随附的新谓词,在这种情况下,如果HTTP状态小于500,则谓词将失败(因此,对于找不到状态项时获得的HTTP状态404,谓词将失败)。这样可以很好地避免重试,但是对断路器没有影响。

是否可以避免基于谓词结果打开断路器,就像基于该谓词跳过重试一样?

解决方法

DefaultRetryInterceptor,当产生异常时断路器断开。 同样,micronaut http client总是会引发404响应错误(阻止客户端除外),这将触发断路器。

predicate的{​​{1}},excludesincludes字段似乎仅用于重试功能。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...