Scala 当前线程上是否存在Akka Ask阻塞
我有一个场景,在这个场景中,我必须通过用户id获取用户的详细信息。这是一个HTTP请求,在我的HTTP处理程序层中,我利用从请求中获得的id,向参与者发送一条消息,参与者然后与数据库服务对话以获取用户 既然这是一个HTTP请求,我需要通过发送一个响应来满足请求。因此,我考虑使用Akka ask模式,但我有以下问题:Scala 当前线程上是否存在Akka Ask阻塞,scala,akka,Scala,Akka,我有一个场景,在这个场景中,我必须通过用户id获取用户的详细信息。这是一个HTTP请求,在我的HTTP处理程序层中,我利用从请求中获得的id,向参与者发送一条消息,参与者然后与数据库服务对话以获取用户 既然这是一个HTTP请求,我需要通过发送一个响应来满足请求。因此,我考虑使用Akka ask模式,但我有以下问题: 这会阻止我当前的线程吗 在我的例子中,使用ask模式获取用户是一个可伸缩的解决方案吗?我的意思是,在任何给定的时间点,我都可以有几百到一百万的用户呼叫这个端点。使用ask模式获取用户
val result: Future[Any] = userActor ? FetchUser(id)
在我的演员中,我会做以下几点:
case fetchUser: FetchUser => sender ! myService.getUser(fetchUser.id)
按照您提出的顺序回答您的问题:
?
不会阻止当前线程。它立即返回一个未来
。然而,未来的结果可能无法立即获得?
,或者请参阅下文,以了解一个仅限未来的可扩展解决方案ServicePool.queryService
,但一次最多只能调用maxquerys
,而且没有参与者:
val alotOfIDs : Seq[ID] = (1 to 1000000) map { i => ID(i)}
val results = alotOfIDs map ServicePool.queryService
你如何回复你的回复?你在用未来的回应吗?在我的演员里,我只是做一个发送者!UserI假设流类似于,获取一个HTTP请求,使用ask模式返回一些结果,然后等待参与者的结果并给出响应。是这样吗?等待演员的结果是什么意思?在我的演员中,我做了以下事情:发送者!fetchUser(userId),其中dbService中的fetchUser(..)方法将返回未来的结果!好的,您正在使用的框架/应用程序服务器是否允许您在将来发送响应?是的,我有一个参与者池,因此我没有发现问题!
val alotOfIDs : Seq[ID] = (1 to 1000000) map { i => ID(i)}
val results = alotOfIDs map ServicePool.queryService