gpt4 book ai didi

java - spring-boot2 上的 Resilience4j - 断路器未打开

转载 作者:行者123 更新时间:2023-12-01 14:17:02 25 4
gpt4 key购买 nike

按照入门指南 ( 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();
}
}


Controller :

@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% 概率的随机错误来测试断路器。但是,电路永远不会打开,我总是出错。
我不知道我错过了什么!有什么帮助吗?

最佳答案

发现问题了!
我忘记将 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>

关于java - spring-boot2 上的 Resilience4j - 断路器未打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61917010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com