stojan
val callWithTimeout: IO<Model> = IO.raceN( IO.effect { service.getModel() }, IO.sleep(2.seconds) )
Satyam Agarwal
simon.vergauwen
waitFor
default
IO.raiseError(TimeOut)
object 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) } } }
A modern programming language that makes developers happier.