java 8 -在等待响应时,何时选择使用Actor Inbox或Futures



以前我使用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的期货

最新更新