1

彼女のhttps://www.baeldung.com/spring-cloud-circuit-breakerを説明するように、私は春の雲のサーキット ブレーカーを調査しています。合計 3 つのサービス。

(1) 親サービス (2) 子サービス (3) データベース。

子サービスの API を呼び出しながら、親サービスに CircuitBreaker(CB) を適用しました。データベースがダウンすると、子が親に例外をスローするため、親は構成したフォールバック アプローチに切り替えます。

CB は OPEN に入ることがありません。下流のデータベースがダウンしているにもかかわらず、親サービスが子サービスを呼び出すたびに。

質問:

  1. 親サービスは子サービスの呼び出しを停止すべきではありませんか?
  2. 構成によると、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
4

0 に答える 0