I configured actuator and reselience4j in application.yml file
Here is my application.yml file
management:
endpoint:
health:
show-details: always
circuitbreakers:
enabled: true
web:
endpoints:
web:
exposure:
include: health
resilience4j:
circuitbreaker:
instances:
ratingHotelBreaker:
register-health-indicator: true
event-consumer-buffer-size: 10
failure-rate-threshold: 50
minimum-number-of-calls: 5
automatic-transition-from-open-to-half-open-enabled: true
wait-duration-in-open-state: 6s
permitted-number-of-calls-in-half-open-state: 3
sliding-window-size: 10
sliding-window-type: count_based
This is my pom.xml file.
<?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>3.0.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.user.service</groupId>
<artifactId>UserService</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>UserService</name>
<description>This is User Service</description>
<properties>
<java.version>17</java.version>
<spring-cloud.version>2022.0.0</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/io.github.resilience4j/resilience4j-spring-boot -->
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
</dependency>
</dependencies>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
Still I am not getting circuit breaker configuration after hitting actuator/health URL.
Here is Image what I am getting
In this image circuit breaker section is not there
What is missing in configuration ?
CodePudding user response:
This is the ideal configuration to enable health metric endpoint for the circuit breaker. Refere here for more at Health endpoint seciton.
application.yml
management.health.circuitbreakers.enabled: true
management.health.ratelimiters.enabled: true
resilience4j.circuitbreaker:
configs:
default:
registerHealthIndicator: true
CodePudding user response:
The application.yml management
& resilience4j
hierarchies are wrong. The following works:
management:
health:
circuitbreakers:
enabled: true
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: health
resilience4j:
circuitbreaker:
configs:
default:
registerHealthIndicator: true
instances:
ratingHotelBreaker:
register-health-indicator: true
event-consumer-buffer-size: 10
failure-rate-threshold: 50
minimum-number-of-calls: 5
automatic-transition-from-open-to-half-open-enabled: true
wait-duration-in-open-state: 6s
permitted-number-of-calls-in-half-open-state: 3
sliding-window-size: 10
sliding-window-type: COUNT_BASED
/actuator/health
returns as follows for your pom file:
{
"status":"UP",
"components":{
"circuitBreakers":{
"status":"UP",
"details":{
"ratingHotelBreaker":{
"status":"UP",
"details":{
"failureRate":"-1.0%",
"failureRateThreshold":"50.0%",
"slowCallRate":"-1.0%",
"slowCallRateThreshold":"100.0%",
"bufferedCalls":0,
"slowCalls":0,
"slowFailedCalls":0,
"failedCalls":0,
"notPermittedCalls":0,
"state":"CLOSED"
}
}
}
},
"clientConfigServer":{
"status":"UNKNOWN",
"details":{
"error":"no property sources located"
}
},
"discoveryComposite":{
"status":"UP",
"components":{
"discoveryClient":{
"status":"UP",
"details":{
"services":[
]
}
},
"eureka":{
"description":"Eureka discovery client has not yet successfully connected to a Eureka server",
"status":"UP",
"details":{
"applications":{
}
}
}
}
},
"diskSpace":{
"status":"UP",
"details":{
"total":252011958272,
"free":75452362752,
"threshold":10485760,
"path":"C:\\workspaces\\stackoverflow_workspace\\spring6\\.",
"exists":true
}
},
"ping":{
"status":"UP"
},
"refreshScope":{
"status":"UP"
}
}
}