zoukankan      html  css  js  c++  java
  • Resilience4j usage

    1. pom

    1) normal

            <dependency>
                <groupId>io.github.resilience4j</groupId>
                <artifactId>resilience4j-circuitbreaker</artifactId>
                <version>0.13.2</version>
            </dependency>
            <dependency>
                <groupId>io.github.resilience4j</groupId>
                <artifactId>resilience4j-retry</artifactId>
                <version>0.13.2</version>
            </dependency>

    2) spring boot

            <dependency>
                <groupId>io.github.resilience4j</groupId>
                <artifactId>resilience4j-spring-boot</artifactId>
                <version>0.13.2</version>
            </dependency>
            <dependency>
                <groupId>io.github.resilience4j</groupId>
                <artifactId>resilience4j-retry</artifactId>
                <version>0.13.2</version>
            </dependency>

    3) spring boot2

            <dependency>
                <groupId>io.github.resilience4j</groupId>
                <artifactId>resilience4j-spring-boot2</artifactId>
                <version>0.13.2</version>
            </dependency>
            <dependency>
                <groupId>io.github.resilience4j</groupId>
                <artifactId>resilience4j-retry</artifactId>
                <version>0.13.2</version>
            </dependency>

    2. create CB

    1) CircuitBreakerRegistry

    (1)default

    CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.ofDefaults();
    
    // Get a CircuitBreaker from the CircuitBreakerRegistry with the global default configuration
    CircuitBreaker circuitBreaker2 = circuitBreakerRegistry.circuitBreaker("myCB2");

    (2)custom

    // Create a custom configuration for a CircuitBreaker
    CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
        .failureRateThreshold(50)
        .waitDurationInOpenState(Duration.ofMillis(1000))
        .ringBufferSizeInHalfOpenState(2)
        .ringBufferSizeInClosedState(2)
        .build();
    
    // Create a CircuitBreakerRegistry with a custom global configuration
    CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.of(circuitBreakerConfig);
    
    
    // Get a CircuitBreaker from the CircuitBreakerRegistry with a custom configuration
    CircuitBreaker circuitBreaker = circuitBreakerRegistry.circuitBreaker("myCB1", circuitBreakerConfig);

    2) directly

    (1) default

    CircuitBreaker defaultCircuitBreaker = CircuitBreaker.ofDefaults("myCB2");
    
    // Create a Retry with at most 3 retries and a fixed time interval between retries of 500ms
    Retry retry = Retry.ofDefaults("myCB2");

    (2) custom

    // Create a custom configuration for a CircuitBreaker
    CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
        .failureRateThreshold(50)
        .waitDurationInOpenState(Duration.ofMillis(1000))
        .ringBufferSizeInHalfOpenState(2)
        .ringBufferSizeInClosedState(2)
        .build();
    
    CircuitBreaker customCircuitBreaker = CircuitBreaker.of("myCB1", circuitBreakerConfig);
    
    // Create a Retry with at most 3 retries and a fixed time interval between retries of 500ms
    Retry retry = Retry.ofDefaults("myCB1");

    3. decorate

    1) backend

    // Simulates a Backend Service
    public interface BackendService {
        String doSomething();
    }

    2) Attached

    // Decorate your call to BackendService.doSomething() with a CircuitBreaker
    Supplier<String> decoratedSupplier = CircuitBreaker
        .decorateSupplier(circuitBreaker, backendService::doSomething);
    
    // Decorate your call with automatic retry
    decoratedSupplier = Retry
        .decorateSupplier(retry, decoratedSupplier);

    4. Exec(可选)

    注意:这部分主要用来测试的!实际代码中可以忽略

    1) vavr

    // Execute the decorated supplier and recover from any exception
    String result = Try.ofSupplier(decoratedSupplier)
        .recover(throwable -> "Hello from Recovery").get();

    System.out.println(result);

    2) lambda expression

    // When you don't want to decorate your lambda expression,
    // but just execute it and protect the call by a CircuitBreaker.
    String result = circuitBreaker.executeSupplier(backendService::doSomething);

    System.out.println(result);

    Reference:

        1. Achieving Fault Tolerance With Resilience4j

        2. resilience4j - circuit breaker

  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/xiaobin-hlj80/p/10166639.html
Copyright © 2011-2022 走看看