Як використовувати патерн “аварійний вимикач” у Spring Boot

pic

Спочатку уявімо, що у вас є три мікросервіси (MS): курс, студент та реєстрація. Мікросервіс реєстрація займається записом студентів на різні курси. Ми збираємося реалізувати патерн Circuit Breaker за допомогою Resilience4j.

У вашому мікросервісі реєстрація додайте такі залежності (Resilience4j, AOP, Actuator):


 org.springframework.cloud  
 spring-cloud-starter-circuitbreaker-resilience4j  


 org.springframework.boot  
 spring-boot-starter-aop  


 org.springframework.boot  
 spring-boot-starter-actuator  

У нашому мікросервісі реєстрація є метод у сервісі (getAllCoursesByStudent), який викликає мікросервіси курс та студент. Давайте подивимося, як ми можемо реалізувати circuit breaker для цього методу.

Спочатку ми анотуємо наш метод за допомогою анотації @CircuitBreaker, а потім визначаємо метод fallback.

@Override  
@CircuitBreaker(name = "${spring.application.name}", fallbackMethod = "getAllCoursesByStudentFallback")  
public List getAllCoursesByStudent(Long id) {  
 List registrationList = registrationRepository.findByStudentId(id);  
 return registrationList.stream()  
 .map(registration -> courseClient.getCourseById(registration.getCourseId()))  
 .collect(Collectors.toList());  
}  

public List getAllCoursesByStudentFallback(Long id, Throwable throwable) {  
 return List.of(new CourseDto(0L, "Fallback Course", "Description unavailable", 0));  
}

У вашому мікросервісі реєстрація оновіть конфігураційний файл (application.properties) наступним чином:

resilience4j:  
 circuitbreaker:  
 instances:  
 inscription-service:  
 register-health-indicator: true  
 failure-rate-threshold: 50  
 minimum-number-of-calls: 5  
 automatic-transition-from-open-to-half-open-enabled: true  
 wait-duration-in-open-state: 5s  
 permitted-number-of-calls-in-half-open-state: 3  
 sliding-window-type: COUNT_BASED  
 sliding-window-size: 10  

management:  
 endpoints:  
 web:  
 exposure:  
 include: health

Після внесення цих змін перезапустіть мікросервіс реєстрація.

Ви можете протестувати, перейшовши за адресою:
http://localhost:8083/actuator/health (якщо порт вашого мікросервісу реєстрація — 8083).

pic

Тепер вимкніть мікросервіс курс і спробуйте викликати getAllCoursesByStudent (використовуючи відповідний endpoint). Ви повинні отримати відповідь fallback.

pic

Щасливого кодування!

Перекладено з: How to use circuit breaker pattern in spring boot

Leave a Reply

Your email address will not be published. Required fields are marked *