java - 这是 Akka 的有效使用吗?

标签 java akka

我有 4 个 Web 服务需要按顺序调用:

w1
w2
w3
w4

因此,每个用户都会调用 4 个 Web 服务。

我将这些服务包装在 Akka 解决方案中,以便逐个调用每个服务。 这些电话中的每一个都应该在

之内进行吗?
  1. 单个 Akka Actor ?
  2. 为每个单独的服务创建一个 Akka 线程?

w4 将详细信息返回给用户。因此,如果 10 个用户使用选项 1 请求详细信息,则会创建 10 个参与者,使用选项 2 则会创建 40 个参与者。

有什么指示吗?

最佳答案

这取决于你是否需要维持一个状态。如果您想按某种顺序调用这四个服务,并且可以使用一些异步 IO 库(例如 Spray client ),那么您可能可以使用单个参与者并在没有阻塞的情况下理解 Futures,如下所示:

def callW1() : Future[W1Response] = ???

...

def receive : Receive = {
case m : SomeMessage => {
  val response : Future[YourResponse] = for {
    w1Response <- callW1();
    w2Response <- callW2(w2Response);
    w3Response <- callW3(w2Response, w3Response);
    w4Response <- callW4();
  } yield w4Response

 val savedSender = sender()

 response.foreach(savedSender ! _)
 }
}

处理消息和 future 的线程数量可以通过 .config 文件配置(默认为 20)。

另一方面,如果您想要缓存 Web 服务响应,您最好为每个具有缓存逻辑的 Web 服务创建一个包装器 Actor,并创建一个管理其调用顺序的主管 Actor。

以下是有关此主题的更多阅读内容:Actors vs Futures

关于java - 这是 Akka 的有效使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26490235/

相关文章:

c# - C# 和 Java 中 Triple DES 的实现有什么区别吗? Java 给出错误 IV 大小错误

java - Java 应用程序的类型安全控制台配置

scala - Akka actorSelection 失败后重新连接

scala - Akka 远程角色,没有默认构造函数的父类(super class)

java - 为什么使用 akka 事件处理程序进行日志记录

java - 如何在 Java 中对字节数组进行 AND 运算?

java - 如何在 java 中创建多 JSON 对象

java - super的克隆是做什么的?

用于 GUI 开发的 Java IDE

scala - Akka 2.4.6 - ask(或?)方法在哪里?