彼女のhttps://www.baeldung.com/spring-cloud-circuit-breakerを説明するように、私は春の雲のサーキット ブレーカーを調査しています。合計 3 つのサービス。
(1) 親サービス (2) 子サービス (3) データベース。
子サービスの API を呼び出しながら、親サービスに CircuitBreaker(CB) を適用しました。データベースがダウンすると、子が親に例外をスローするため、親は構成したフォールバック アプローチに切り替えます。
CB は OPEN に入ることがありません。下流のデータベースがダウンしているにもかかわらず、親サービスが子サービスを呼び出すたびに。
質問:
- 親サービスは子サービスの呼び出しを停止すべきではありませんか?
- 構成によると、5 回のうち 3 回の失敗呼び出しで CB が開かれます。正しい?
ここで構成が欠落している場合に備えて助けてください。
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> globalCustomConfiguration() {
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
.failureRateThreshold(50)
.waitDurationInOpenState(Duration.ofMillis(1000))
.slidingWindowSize(5)
.build();
TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
.timeoutDuration(Duration.ofSeconds(4))
.build();
return factory -> factory.configure(builder -> builder.circuitBreakerConfig(circuitBreakerConfig)
.timeLimiterConfig(timeLimiterConfig).build(), "circuitBreaker5Sliding");
}
インベントリ サービス
@Service
public class InventoryService {
@Autowired
private CircuitBreakerFactory defaultCustomizer;
private static final Logger LOGGER = LoggerFactory.getLogger(InventoryService.class);
private RestTemplate restTemplate = new RestTemplate();
public List<Inventory> getInventories(String URI) {
CircuitBreaker circuitBreaker = defaultCustomizer.create("circuitBreaker5Sliding");
String url = "http://127.0.0.1:8086/" + URI;
LOGGER.info("url {}",url);
//Inventory[] items = circuitBreaker.run(() -> restTemplate.getForObject(url, Inventory[].class));
Inventory[] items = circuitBreaker.run(() -> restTemplate.getForObject(url, Inventory[].class),
throwable -> defaultItems());
LOGGER.info("List of inventories {}",items.length);
List<Inventory> itemList = Arrays.asList(items);
return itemList;
}
private Inventory[] defaultItems() {
try {
List<Inventory> inventories = new ArrayList<>();
Inventory default1 = new Inventory(4545L,1L, 2L,"default", 1);
inventories.add(default1);
return inventories.toArray(new Inventory[inventories.size()]);
} catch (Exception e) {
LOGGER.error("error occurred while reading the file", e);
}
return null;
}
}
Pom.xml
- spring-cloud-starter-openfeign
- spring-cloud-openfeign-core
- 春再試行 1.2.4.RELEASE
- spring-cloud-starter-circuitbreaker-resilience4j 1.0.3.RELEASE
- spring-cloud-dependencies Hoxton.SR4