【问题标题】:Perform tasks in the correct order in Scala and Akka without blocking在 Scala 和 Akka 中以正确的顺序执行任务而不会阻塞
【发布时间】:2016-09-15 09:03:44
【问题描述】:

我有与 Couchbase 一起使用的微服务。我的服务必须询问 Couchbase 我有多少具有当前 ID 的文档:如果数量少,我创建另一个文档。

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

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

但是当我将 Kafka 生产者添加到这个“等待”未来时,我遇到了问题,当 kafka 关闭时,这个未来会阻塞很长时间,以至于我有等待超时。我把这个生产者放在 Future 中,但是在这之后我的 Executor Context 中没有很多线程。

【问题讨论】:

  • 明确措辞;修正语法错误。

标签: multithreading scala akka nonblocking akka-http


【解决方案1】:

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

当我进行外部服务调用时,我通常会使用它,而该服务往往不可用。

【讨论】:

  • Circuit Breake 不适合我的问题。在这种情况下我需要正确的顺序,除非可以,否则不要问
猜你喜欢
  • 1970-01-01
  • 2018-12-15
  • 2016-04-11
  • 2013-10-18
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多