簡體   English   中英

對於某些類型的異常,resilience4j 隔板跳過回退方法

[英]resilience4j bulkhead skipping fallback method for certain type of exceptions

我使用 reslience4j 隔板將活動線程數限制為我的一種服務方法。 當線程限制超過配置時,它應該 go 到按預期發生的回退方法。

但是,當驗證失敗時,作為我方法中業務邏輯的一部分,我會向我的消費者拋出帶有自定義消息的 BadRequestException。 當checkedException也發生時,這里的控件轉到一個回退方法理想情況下不應該是這樣。

那么我們是否有任何配置來跳過某些類型的異常的控制轉到后備方法,類似於我們在 Hystrix 中的方式?

@Bulkhead(name="bhName" fallbackMethod="fallbackMethod")
public void doSomething(){

    //validatiion
    // if validation succeeds
         //do some business logic
    // else if validation fails
        throw BadRequestException("Error Message")
}

public void fallbackMethod(Exception ex){
   log.info("The number of concurrency limit exceeded");
   return null;
} 

我使用 reslience4j 隔板將活動線程數限制為我的一種服務方法。 當線程限制超過配置時,它應該轉到按預期發生的回退方法。

但是作為我方法中業務邏輯的一部分,當驗證失敗時,我將帶有自定義消息的 BadRequestException 拋出給我的消費者。 這里,當checkedException也發生過時,控件將轉為一個后備方法。理想情況下,情況並非如此。

那么,我們是否有任何配置可以跳過對某些類型的Exception的控制權轉為fallback方法,類似於我們在Hystrix中的方式?

@Bulkhead(name="bhName" fallbackMethod="fallbackMethod")
public void doSomething(){

    //validatiion
    // if validation succeeds
         //do some business logic
    // else if validation fails
        throw BadRequestException("Error Message")
}

public void fallbackMethod(Exception ex){
   log.info("The number of concurrency limit exceeded");
   return null;
} 

我認為最新的 Spring Boot 和 Spring Cloud 版本存在問題。 我測試了舊的,並且 Bulkhead 模式對我有用。

請檢查我的 Maven POM。

添加以下 Spring 引導版本

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.3.RELEASE</version>
    <relativePath/>
</parent>

添加以下 Spring Cloud and Resilience4j library version

<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    <resilience4j.version>1.5.0</resilience4j.version>
</properties>

   <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-spring-boot2</artifactId>
        <version>${resilience4j.version}</version>
    </dependency>

添加以下依賴項

    <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-circuitbreaker</artifactId>
        <version>${resilience4j.version}</version>
    </dependency>
    <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-timelimiter</artifactId>
        <version>${resilience4j.version}</version>
    </dependency>
    <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-bulkhead</artifactId>
        <version>${resilience4j.version}</version>
    </dependency>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM