如何查询大量的Akka actor并将结果存储在数据库中?

问题描述:

我正在斯卡拉/阿卡建立证券交易模拟器。每个TraderActor都有一个var wealth,随着演员通过市场进行交易,该值会随着时间而波动。如何查询大量的Akka actor并将结果存储在数据库中?

在不同的时间间隔,我想查询所有TradingActors以获得各自“财富”的当前值,并将所有结果存储在数据库中供以后分析。我该如何做到这一点?

我会派一个StoreMessage会告诉TraderActor s到一些StoreData消息,他们wealth值发送到StoreController演员裁判。然后

StoreController会收到StoreData消息,要么因为他们收到存储的内容,或将其路由到StoreWorker,将它们存储,因为他们收到(使StoreController路由器),或写在他们面前堆叠起来,或任何适合您需求的其他策略。

你想要的方式StoreController处理接收到的wealth主要取决于你的数据库中,TraderActor S上的号码,你想多久存储值等对

+0

@JeanLogheart对 – davidrpugh 2015-02-06 11:06:58

我觉得event bus实施自带Akka就是出于这个目的。

查询演员万元检索它们的价值是不是一个好主意,因为

  • 每当你得到整个汇总值,这些值将会过时。
  • 你不能提供实时报告

所以,你需要有点分布式事件系统就像卡夫卡在任何改变的价值推到这一点。然后,您可以定义订阅它的卡夫卡消费者,并接收事件和聚合或可视化等。 通过这种方式,您将拥有实时报告系统,无需设置任何cronjob来定期检查演员并检索其状态。

+0

有没有什么建议我把它称为“报告”,只是为了让它更有形,当然不是报告那些州或可视化,而是可以将它们存储在数据库中。关键是你可以轻松做到任何你想做的事。 – Nami 2015-02-06 15:38:13

+0

我担心在查询过程中数据会过时。您似乎在倡导推送数据的模型?这是你提到的[Kafka](http://kafka.apache.org/)吗?我不明白是谁/吃什么卡夫卡输出? – davidrpugh 2015-02-06 17:06:04

+0

是的,你可以在你的应用程序中有另一个层,像另一个演员系统,它消耗上述演员在kafka或任何其他排队系统(如rabbitmq)中推送的事件。在高级模型中,甚至可以拥有完全隔离的系统,这些系统由订阅分发队列系统的actor组成,并消耗事件并执行持久化。 – Nami 2015-02-06 22:03:53