Spring boot 如何在调用方法时使用resilience4j?

Spring boot 如何在调用方法时使用resilience4j?,spring-boot,spring-retry,resilience4j,Spring Boot,Spring Retry,Resilience4j,我尝试使用spring retry进行电路断开和重试,如下所示,它按预期工作,但问题是无法将“maxAttempts/openTimeout/resetTimeout”配置为环境变量(错误是应该是常量)。我的问题是如何使用resilience4j来实现以下要求 另外,请建议有一种将环境变量传递给“maxtures/openTimeout/resetTimeout”的方法 断路器(值={ MongoServerException.class, MongoSocketException.class,

我尝试使用spring retry进行电路断开和重试,如下所示,它按预期工作,但问题是无法将“maxAttempts/openTimeout/resetTimeout”配置为环境变量(错误是应该是常量)。我的问题是如何使用resilience4j来实现以下要求

另外,请建议有一种将环境变量传递给“maxtures/openTimeout/resetTimeout”的方法

断路器(值={ MongoServerException.class, MongoSocketException.class, MongoTimeoutException.class MongoSocketOpenException.class}, 最大尝试次数=2, openTimeout=20000L, 重置超时=30000升) 公共作废插入文档(ConsumerRecord ConsumerRecord){ retryTemplate.execute(args0->{ LOGGER.info(String.format(“使用键插入记录------->%s”,consumerRecord.key().toString()); BasicDBObject=BasicDBObject.parse(consumerRecord.value().toString()); dbObject.put(“_id”,consumerRecord.key()); mongoCollection.replaceOne(,getReplaceOptions()); 返回null; }); } @恢复 公共无效恢复(运行时异常t){ LOGGER.info(“从断路器中恢复”); } 使用的依赖项是

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.retry</groupId>
        <artifactId>spring-retry</artifactId>
    </dependency>

org.springframework.boot
弹簧启动机aop
org.springframework.retry
春季重试

您没有使用resilience4j,而是使用spring重试。 您应该调整问题的标题。

CircuitBreakerConfig CircuitBreakerConfig=CircuitBreakerConfig.custom()
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
    .waitDurationInOpenState(Duration.ofMillis(20000))
    .build();
CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.of(circuitBreakerConfig);
CircuitBreaker circuitBreaker = circuitBreakerRegistry.circuitBreaker("mongoDB");

RetryConfig retryConfig = RetryConfig.custom().maxAttempts(3)
    .retryExceptions(MongoServerException.class,
        MongoSocketException.class,
        MongoTimeoutException.class
        MongoSocketOpenException.class)
    .ignoreExceptions(CircuitBreakerOpenException.class).build();
Retry retry = Retry.of("helloBackend", retryConfig);

Runnable decoratedRunnable = Decorators.ofRunnable(() -> insertDocument(ConsumerRecord<Long, GenericRecord> consumerRecord))
.withCircuitBreaker(circuitBreaker)
.withRetry(retry)
.decorate();

String result = Try.runRunnable(decoratedRunnable )
                .recover(exception -> ...).get();
.WaitDurationInPenstate(持续时间:百万(20000)) .build(); CircuitBreakerRegistry CircuitBreakerRegistry=CircuitBreakerRegistry.of(circuitBreakerConfig); 断路器断路器=断路器注册。断路器(“mongoDB”); RetryConfig RetryConfig=RetryConfig.custom().maxAttempts(3) .RetryException(MongoServerException.class, MongoSocketException.class, MongoTimeoutException.class MongoSocketOpenException.class) .IgnoreException(CircuitBreakerOpenException.class).build(); Retry-Retry=Retry.of(“helloBackend”,retryConfig); Runnable decoratedRunnable=Decorators.ofRunnable(()->insertDocument(ConsumerRecord ConsumerRecord)) .带断路器(断路器) .withRetry(重试) .装饰(); 字符串结果=Try.runnable(decoratedRunnable) .recover(异常->…).get();
对。正如我提到的,我尝试使用spring重试,但遇到了问题,所以我想使用resilience4j来实现相同的功能。我的要求是,Spring独立应用程序应该在MongoDB中连接并插入记录,并希望在插入方法/功能上断路器(假设最大尝试次数为3次)和重试(重试尝试次数为4次)。所以,如果mongo不可用,最多重试3次,重试4次,电路应在一定时间内打开。所有配置都是通过ENV变量进行的。任何代码示例都会很有帮助。如果您使用的是Spring Boot,它会更简单。但请看一下我们的用户指南。
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
    .waitDurationInOpenState(Duration.ofMillis(20000))
    .build();
CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.of(circuitBreakerConfig);
CircuitBreaker circuitBreaker = circuitBreakerRegistry.circuitBreaker("mongoDB");

RetryConfig retryConfig = RetryConfig.custom().maxAttempts(3)
    .retryExceptions(MongoServerException.class,
        MongoSocketException.class,
        MongoTimeoutException.class
        MongoSocketOpenException.class)
    .ignoreExceptions(CircuitBreakerOpenException.class).build();
Retry retry = Retry.of("helloBackend", retryConfig);

Runnable decoratedRunnable = Decorators.ofRunnable(() -> insertDocument(ConsumerRecord<Long, GenericRecord> consumerRecord))
.withCircuitBreaker(circuitBreaker)
.withRetry(retry)
.decorate();

String result = Try.runRunnable(decoratedRunnable )
                .recover(exception -> ...).get();