在Scala和Akka中以正确的顺序执行任务而不会阻塞

时间:2016-09-15 09:03:44

标签: multithreading scala akka nonblocking akka-http

我有与Couchbase一起使用的微服务。我的服务必须向Couchbase询问当前id有多少文件:如果数量很少,我会创建另一份文件。

我的问题是这是非阻塞的:如果我在第一次创建文档时有很多请求,第二个请求显示文档数量很少(因为第一个不创建文档),所以创建了另一个新文档。

为了解决这个问题,我在akka中创建了一个actor系统,每个id有一个actor,阻塞(使用Await)直到第一个完成。这给出了我想要的订单。有更好的方法吗?

但是当我将Kafka制作人添加到这个'Await'Future时,我遇到了这个问题,当kafka失败时,这个未来会阻塞很长时间以至于我有Await超时。我把这个生产者放在Future中,但在此之后我的Executor Context中没有很多线程。

1 个答案:

答案 0 :(得分:0)

我认为你可以在这里使用断路器:http://doc.akka.io/docs/akka/snapshot/common/circuitbreaker.html

当我正在进行外部服务调用时,我通常会使用此服务,因为该服务很可能无法使用。