以前我使用Java Future对象和Await.result
从Akka actor获取响应。这允许我在Java 6代码库和Akka之间创建一个桥梁。
缺点:长时间运行任务时线程阻塞
我已经迁移到Java 8,并正在考虑使用非阻塞支持来用回调取代Await.Result
。从理论上讲,这是可行的。然而,我注意到在Java 8的最新版本的Typesafe HelloAkka教程中,Akka收件箱被用来处理响应而不是Future;
- 是收件箱使用首选选项在未来?
- 未来(或可完成的未来)什么时候是更好的选择?
这篇Stackoverflow帖子中的两个回复都添加了可能回答您问题的上下文。收件箱(据我所知)只是使用期货和调用其他参与者的替代方案,相反,你允许其他参与者从外部询问你的收件箱(类似对象的参与者)…看到这个。此外,看看杰米·艾伦的"客串"模式。我在Stackoverflow上发布了一个简单的例子。
如果你想与外界建立一个桥梁,你打算如何使用收件箱?我猜你只有一个参考演员。
考虑诸如
之类的事情- 您可以等待多长时间的回复
- 回放永远不会回来-你如何反应
- 阅读有关断路器的内容,它可以保护您的客户端代码中可能出现的服务错误(这里是akka系统)
我会选择java的CompletableFuture作为接口,并在ask或tell操作后翻译akka的期货