这是Akka的有效用途吗?

时间:2014-10-21 15:16:43

标签: java akka

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

w1
w2
w3
w4

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

我在Akka解决方案中包装这些服务,以便一个接一个地调用每个服务。 是否应该在

范围内进行这些调用
  1. 单个Akka演员?
  2. 是否为每项服务创建了一个Akka线程?
  3. w4向用户返回详细信息。因此,如果10个用户使用选项1请求详细信息,则会创建10个actor,使用选项2,将创建40个actor。

    任何指针?

1 个答案:

答案 0 :(得分:1)

这取决于您是否需要维持状态。如果您只想按顺序调用这四种服务,并且可以使用一些异步IO库(如Spray client),那么您可以放弃使用单个actor以及对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 ! _)
 }
}

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

另一方面,如果你想缓存webservice响应,你最好为每个带有缓存逻辑的web服务创建一个包装器actor,还有一个管理它们调用序列的supervisor actor。

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