stojan
05/09/2020, 8:55 AMval callWithTimeout: IO<Model> = IO.raceN(
IO.effect { service.getModel() },
IO.sleep(2.seconds)
)
right?Satyam Agarwal
05/09/2020, 9:39 AMsimon.vergauwen
05/09/2020, 10:31 AMwaitFor
takes a nullable default
value which defaults to IO.raiseError(TimeOut)
Satyam Agarwal
05/09/2020, 11:17 AMSatyam Agarwal
05/09/2020, 11:19 AMobject ExtApiCommand {
private const val executionTimeoutMillis = 7000L
private const val commandKey = "ExtApi"
val circuitBreaker: CircuitBreaker = circuitBreakerRegistry.circuitBreaker(commandKey)
private val timeLimiterConfig: TimeLimiterConfig = TimeLimiterConfig
.custom()
.timeoutDuration(Duration.ofMillis(executionTimeoutMillis))
.build()
private val timeLimiter: TimeLimiter = timeLimiterRegistry.timeLimiter(commandKey, timeLimiterConfig)
private val backendCall: suspend (HttpClient, HttpRequestBuilder) -> String =
{ client, requestData ->
circuitBreaker.executeSuspendFunction {
timeLimiter.executeSuspendFunction { client.request<String>(requestData) }
}
}
fun execute(httpClient: HttpClient, request: HttpRequestBuilder): IO<String> {
return IO
.effect(httpClient.coroutineContext + MDCContext()) { backendCall(httpClient, request) }
}
}
Satyam Agarwal
05/09/2020, 11:30 AM