带有Http请求的断路器monix

时间:2019-07-04 21:15:18

标签: scala scala-cats monix scalaz-zio

我正在努力使Monix的断路器与我在服务中收到的某些请求不同步,并且该请求失败,因此它应激活断路器,即使断开,它也必须使断路器请求。

这是我的代码

setTimeout

似乎是i处于异步状态,该 @GET def XXXX(@Suspended asyncResponse: AsyncResponse): Unit = { val circuitBreaker = breaker.doOnOpen(eval.Task { logger.error(null, "Circuit breaker change state to open") asyncResponse.resume(Response.status(Response.Status.SERVICE_UNAVAILABLE.getStatusCode)) }) .doOnHalfOpen(eval.Task(logger.error(null, "Circuit breaker change state to half-open"))) .doOnClosed(eval.Task(logger.error(null, "Circuit breaker change state to close"))) val staticToggleProgram: ZIO[Any, Throwable, Boolean] = (for { staticToggle <- toggleService.getStaticToggle() state <- renderResponse(asyncResponse, staticToggle) } yield state).catchAll(t => { logger.error(null, s"Toggle Error handler. Unhandled effect $t") asyncResponse.resume(Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode)) ZIO.fail(t) }) val task = eval.Task(main.unsafeRun(staticToggleProgram)) circuitBreaker.protect(task).runAsync } 在打开时在断路器回调中使用,被到达的下一个请求覆盖,然后我的服务卡住,无法再有其他请求到达。

到目前为止,唯一的解决方案是运行Sync,但这不是一个选择,因为它必须是NIO

AsyncResponse

0 个答案:

没有答案