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

  • 相关阅读:
    Android Activity中获取当前焦点的控件,自动化输入EditText
    Java Android 二进制文件读写
    Delphi 动态数组、静态数组、TBytes 的区别
    IIS日志分析工具-Log Parser
    信息安全等级保护三级系统基线要求判分标准之应用安全
    通过TCPView工具查看foxmail用exchange方式连接exchange时用什么端口
    Windows2008R2操作系统日志清理
    批量IP自动netcat脚本
    批量IP自动ping脚本
    批量移动AD用户到指定OU
  • 原文地址:https://www.cnblogs.com/xiaobin-hlj80/p/10166639.html
Copyright © 2011-2022 走看看