2016-12-27 139 views
0
  1. 主要用于akka原始人Actor - 任何状态变化或状态查询通过异步消息的人办理。阿卡:演员的组合和代理

  2. Akka还提供了一个鲜为人知的原始码Agent,它是由新值(或通过修改其值的函数)异步更新的。ans可以从任何线程同步读取。

问题:在单JVM演员系统,如何将这些方法结合起来:具有通过异步更新原始。只有消息(如Actor),但哪个状态可以直接以线程安全方式读取(如Agent

我真的很感激链接到任何相关的讨论/项目/样本。

解决方案,我发现迄今:

  1. 明显的可能性是有Actor其更新 Agent。但我想知道是否有更优雅的&高性能解决方案。
  2. Scalaz Agent,但没有scalaz依赖性的解决方案将是首选。
  3. 中途肮脏的解决方案:中断Actor通过发布(在外发邮件中)功能来读取actor的状态,类似于Agent.get()。线程安全性必须手工处理。
  4. 变通方法:让Actor更新中的某些外部共享状态。线程安全性必须手工处理。

回答

1

注意剂已被标记为由阿卡队弃用,并会在下一个主要版本(2.5.0可能)被移除。 This是相应的票证。

确实,Akka的核心思想是鼓励异步沟通,所以我认为从这个角度来看,沟通代理是有意义的。

另一种解决方案可能是使用Actor并异步访问其状态。如果此场景涉及到您作为Get消息可能需要等待,直到处理几条Update消息,则可以考虑先使用优先邮箱处理Get消息。示例here