我有4个需要按顺序调用的Web服务:
w1
w2
w3
w4
因此,对于每个用户,都会调用4个Web服务。
我在Akka解决方案中包装这些服务,以便一个接一个地调用每个服务。 是否应该在
范围内进行这些调用w4向用户返回详细信息。因此,如果10个用户使用选项1请求详细信息,则会创建10个actor,使用选项2,将创建40个actor。
任何指针?
答案 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