Ich Auswertung resilience4j es in unseren reaktiven APIs enthält, so weit ich Mock Flußmittel verwenden.
Der Service unter nicht immer, wie ich, wenn die Schaltung auf mehrere Fehler öffnet testen möchten:
@Service
class GamesRepositoryImpl : GamesRepository {
override fun findAll(): Flux<Game> {
return if (Math.random() <= 1.0) {
Flux.error(RuntimeException(fail))
} else {
Flux.just(
Game(The Secret of Monkey Island),
Game(Loom),
Game(Maniac Mansion),
Game(Day of the Tentacle)).log()
}
}
}
Dies ist die Prozedur, die das Repository verwendet, den Druck, den Zustand der Schaltung:
@Component
class ApiHandlers(private val gamesRepository: GamesRepository) {
var circuitBreaker : CircuitBreaker = CircuitBreaker.ofDefaults(gamesCircuitBreaker)
fun getGames(serverRequest: ServerRequest) : Mono<ServerResponse> {
println(*********${circuitBreaker.state})
return ok().body(gamesRepository.findAll().transform(CircuitBreakerOperator.of(circuitBreaker)), Game::class.java)
}
}
Ich rufe die API-Endpunkt viele Male, immer diese stacktrace erhalten:
*********CLOSED
2018-03-14 12:02:28.153 ERROR 1658 --- [ctor-http-nio-3] .a.w.r.e.DefaultErrorWebExceptionHandler : Failed to handle request [GET http://localhost:8081/api/v1/games]
java.lang.RuntimeException: FAIL
at com.codependent.reactivegames.repository.GamesRepositoryImpl.findAll(GamesRepositoryImpl.kt:12) ~[classes/:na]
at com.codependent.reactivegames.web.handler.ApiHandlers.getGames(ApiHandlers.kt:20) ~[classes/:na]
...
2018-03-14 12:05:48.973 DEBUG 1671 --- [ctor-http-nio-2] i.g.r.c.i.CircuitBreakerStateMachine : No Consumers: Event ERROR not published
2018-03-14 12:05:48.975 ERROR 1671 --- [ctor-http-nio-2] .a.w.r.e.DefaultErrorWebExceptionHandler : Failed to handle request [GET http://localhost:8081/api/v1/games]
java.lang.RuntimeException: fail
at com.codependent.reactivegames.repository.GamesRepositoryImpl.findAll(GamesRepositoryImpl.kt:12) ~[classes/:na]
at com.codependent.reactivegames.web.handler.ApiHandlers.getGames(ApiHandlers.kt:20) ~[classes/:na]
at com.codependent.reactivegames.web.route.ApiRoutes$apiRouter$1$1$1.invoke(ApiRoutes.kt:14) ~[classes/:na]
Wie Sie die Schaltung zu sehen ist immer geschlossen. Ich weiß nicht , ob es irgendetwas diese Meldung zu tun hat , aber zu bemerken No Consumers: Event ERROR not published
.
Warum funktioniert das nicht?