Resilience4j на пружинном чехле2 - автоматический выключатель не размыкается

Следуя руководству по началу работы (https://resilience4j.readme.io/docs/getting-started-3) и демонстрационный проект (https://github.com/resilience4j/resilience4j-spring-boot2-demo) Я хотел протестировать это самостоятельно, создав более простое тестовое приложение.

Вот код:


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ServiceConfiguration {

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

Контроллер:


@RestController
public class ServiceController {

    @Autowired
    private  AlbumService albumService;


    @GetMapping("/albums")
    ResponseEntity<String> getAlbums() {
       return albumService.getAlbums();
    }

}

И класс обслуживания:

@Slf4j
@Service
public class AlbumService {

    @Autowired
    private  RestTemplate restTemplate;

    @CircuitBreaker(name = "albumService", fallbackMethod = "getDefaultAlbumList")
    public ResponseEntity<String> getAlbums() {
        String url = MockNeat.secure().probabilites(String.class)
                .add(0.7, "https://wrong-url.com")
                .add(0.3, "https://jsonplaceholder.typicode.com/albums").val();
        return new ResponseEntity<>(restTemplate.getForObject(url, String.class), HttpStatus.OK);
    }

    private ResponseEntity<String> getDefaultAlbumList(Exception ex) throws URISyntaxException, IOException {
        log.info("Recovered: " + ex.getMessage());
        return new ResponseEntity<>(new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("fallback-album-list.json").toURI()))), HttpStatus.OK);
    }
}

Наконец, вот файл приложения:

resilience4j:
  circuitbreaker:
    configs:
      default:
        registerHealthIndicator: true
        slidingWindowSize: 10
        minimumNumberOfCalls: 5
        permittedNumberOfCallsInHalfOpenState: 3
        automaticTransitionFromOpenToHalfOpenEnabled: true
        waitDurationInOpenState: 5s
        failureRateThreshold: 50
        eventConsumerBufferSize: 10
    instances:
      albumService:
        baseConfig: default

management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always
  metrics:
    distribution:
      percentiles-histogram:
        http:
          server:
            request: true
        resielence4j:
          circuitbreaker:
            calls: true

Я ввел случайную ошибку с вероятностью 70% для проверки автоматического выключателя. Однако цепь никогда не размыкается, и я всегда получаю ошибку. Я понятия не имею, что мне не хватает! Любая помощь?


person user3727540    schedule 20.05.2020    source источник


Ответы (1)


Нашел проблему! Я забыл включить spring-aop как зависимость! Вот мой pom.xml на случай, если кто-то столкнется с той же проблемой:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>r4j</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>r4j</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <repositories>
        <repository>
            <id>jcenter</id>
            <url>https://jcenter.bintray.com/</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>net.andreinc.mockneat</groupId>
            <artifactId>mockneat</artifactId>
            <version>0.3.9</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.github.resilience4j</groupId>
            <artifactId>resilience4j-spring-boot2</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
            <version>2.3.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>2.3.0.RELEASE</version>
        </dependency>
    </dependencies>

</project>
person user3727540    schedule 21.05.2020
comment
Та же проблема, и мне также не хватало этого в моем помпе, но добавление ничего не исправило. Как вам удалось узнать, что это ваша проблема? Интересно, поможет ли мне найти ответ отладочный или справочный материал, который помог вам найти ответ ... - person ArtOfWarfare; 07.11.2020