Как проверить фильтр автоматического выключателя Spring Cloud?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как проверить фильтр автоматического выключателя Spring Cloud?

Сообщение Anonymous »


Here's an MRE. Я потратил некоторое время, написал его с нуля и постарался сделать его небольшим

Код: Выделить всё

package com.example.gatewaydemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GatewaydemoApplication {
public static void main(String[] args) {
SpringApplication.run(GatewaydemoApplication.class, args);
}

}

Код: Выделить всё

package com.example.gatewaydemo.config;

import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
import io.github.resilience4j.timelimiter.TimeLimiterConfig;
import org.springframework.cloud.circuitbreaker.resilience4j.ReactiveResilience4JCircuitBreakerFactory;
import org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JConfigBuilder;
import org.springframework.cloud.client.circuitbreaker.Customizer;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.OrderedGatewayFilter;
import org.springframework.cloud.gateway.filter.factory.SpringCloudCircuitBreakerFilterFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;

@Configuration
public class MyCircuitBreakerConfig {
private final ServerProperties serverProperties;

public MyCircuitBreakerConfig(ServerProperties serverProperties) {
this.serverProperties = serverProperties;
}

@Bean
public Customizer circuitBreakerCustomizer() {
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
.timeLimiterConfig(TimeLimiterConfig.custom()
.timeoutDuration(serverProperties.getTimeout())
.build())
.build());
}

@Bean
// this is what I want to test
public GatewayFilter circuitBreakerFilter(SpringCloudCircuitBreakerFilterFactory filterFactory) {
return wrapInOrderedGatewayFilter(
filterFactory.apply("route-id",
config -> config.setFallbackUri("/fallback")
));
}

// sometimes filters don't get applied unless wrapped in OrderedGatewayFilter
private static GatewayFilter wrapInOrderedGatewayFilter(GatewayFilter wrappee) {
return new OrderedGatewayFilter(wrappee, 0);
}

@Bean
public RouterFunction fallbackRouterFunction() {
return RouterFunctions.route()
.GET("/fallback", serverRequest -> ServerResponse.status(HttpStatus.GATEWAY_TIMEOUT)
.bodyValue("Timeout!"))
.build();
}
}

Код: Выделить всё

package com.example.gatewaydemo.config;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.time.Duration;

@ConfigurationProperties(prefix = "my-app")
@Getter
@Setter
public class ServerProperties {
private Duration timeout;
}

Код: Выделить всё

# application.yml

my-app:
timeout: 5s

Код: Выделить всё



4.0.0

org.springframework.boot
spring-boot-starter-parent
3.1.5
  

Источник: [url]https://stackoverflow.com/questions/78134394/how-do-i-test-spring-clouds-circuit-breaker-filter[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»