当前位置: 首页 > 知识库问答 >
问题:

Micronaut断路器是否可以跳过某些HTTP状态代码?

宰父桐
2023-03-14

有没有办法配置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;
    }
}

在这里,我使用了Micronaut2附带的新谓词,在本例中,如果HTTP状态小于500,谓词将失败(因此,当项目未找到时,对于我获得的HTTP状态404,谓词将失败)。这对避免重试非常有效,但对断路器没有影响。

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

共有1个答案

宫元徽
2023-03-14

defaultretryinterceptor上查看,当产生异常时,断路器打开。此外,micronaut http client将始终为404响应抛出错误(阻塞客户端除外),这将触发断路器。

@circuitbreaker谓词排除包括字段似乎仅用于重试功能。

 类似资料:
  • 我正在使用TestNG数据提供程序读取数据池。xls文件,在名为ReadData的类中包含1017个测试用例和214列。 然后,我将214个String参数传递到名为Enterprise Data的单独类中的@Test注释中。 我在@Test中创建了一个for循环,只执行ceratin迭代的操作(比如1-10),它总共只输入10个测试用例。我的问题是,在运行结束时,它仍然显示“Total test

  • 我知道有人正在编写一个API,并希望使用HTTP状态代码来报告查询的结果。例如,如果用户调用,并且产品不存在,它将返回HTTP状态。我认为,因为这是一个有效的调用(即实际的HTTP请求没有格式错误),它应该返回一个code响应,并且只需要响应的主体类似于。 所以我的问题是,, 1) 使用HTTP状态码来传递非HTTP程序状态是否合适,如上面的示例所示? 2)是否有一些标准规范,或者至少是广泛使用的

  • 问题内容: 如标题所述,我想基于仅在运行时可用的信息来动态加载(或不)动态加载Go软件包。 目的是允许用户通过添加新的本机脚本命令的自定义程序包扩展程序。当前,每次我添加新命令或禁止使用某些命令时,都需要编辑程序并重新编译,而如果我可以制作某种dll之类的文件,则可以创建一个“导入”脚本命令来搜索和加载命名命令库。 出于好奇,该程序是基于定制命令的脚本库,我将其用于各种用途。 我提前进行了一些搜索

  • 问题内容: 有没有办法限制来自mysqldump命令的某些表? 例如,我将使用以下语法 仅 转储table1和table2: 但是,有没有类似的方法来转储 除 table1和table2 之外的 所有表?我没有在mysqldump文档中找到任何东西,所以暴力破解(指定所有表名)是唯一的方法吗? 问题答案: 您可以使用--ignore- table 选项。所以你可以做 之后没有空格(这不是错字)。

  • 本文向大家介绍http都有哪些状态码?相关面试题,主要包含被问及http都有哪些状态码?时的应答技巧和注意事项,需要的朋友参考一下 1**:请求收到,继续处理 2**:操作成功收到,分析、接受 3**:完成此请求必须进一步处理 4**:请求包含一个错误语法或不能完成 5**:服务器执行一个完全有效请求失败 再具体就如下: 100——客户必须继续发出请求 101——客户要求服务器根据请求转换HTTP