Scala 如何查询大量Akka参与者并将结果存储在数据库中?

Scala 如何查询大量Akka参与者并将结果存储在数据库中?,scala,akka,Scala,Akka,我正在Scala/Akka建立一个证券交易模拟器。每个TraderActor都有一个var-wealth,随着参与者通过市场进行交易而随时间波动 在不同的时间间隔内,我想查询所有的TradingActors,以获得其各自“财富”的当前价值,并将所有结果存储在数据库中以供以后分析。我如何才能做到这一点呢?我会发送一条StoreMessage,告诉TraderActors通过一些StoreData消息将他们的wealth值发送给StoreControlleractor ref StoreContro

我正在Scala/Akka建立一个证券交易模拟器。每个
TraderActor
都有一个
var-wealth
,随着参与者通过市场进行交易而随时间波动


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

我会发送一条
StoreMessage
,告诉
TraderActor
s通过一些
StoreData
消息将他们的
wealth
值发送给
StoreController
actor ref

StoreController
随后将接收
StoreData
消息,并在接收时存储它们的内容,或者将它们路由到
StoreWorker
,后者将在接收时存储它们(使
StoreController
成为路由器),或者在写入之前将它们堆叠起来,或任何其他适合您需要的策略


您希望
StoreController
处理收到的
wealth
的方式主要取决于您的数据库、
TraderActor
s的数量,以及您希望存储值的频率,等等。

我认为Akka附带的实现就是为了这个目的。

查询数百万参与者来检索他们拥有的价值不是一个好主意,因为

  • 无论何时获得整个聚合值,这些值都将过时
  • 您不能有实时报告
所以,你需要像卡夫卡这样的分布式事件系统,在任何变化时都能将价值推到这一点上。然后,您可以定义卡夫卡的消费者,他们订阅卡夫卡并接收事件、聚合或可视化等。
通过这种方式,您将拥有实时报告系统,而无需设置任何cronjob来定期检查参与者并检索他们的状态。

@JeanLogheart您有什么建议吗?我称之为“报告”只是为了使其更具体,当然,您可以将其存储在数据库中,而不是报告这些状态或可视化。关键是,您可以轻松地使用这些值做任何您想做的事情。我担心数据在查询过程中会过时。你似乎在提倡数据推送模式?这就是你提到的那个吗?我不明白谁/什么在使用Kafka输出?是的,您可以在应用程序中使用另一个层,如另一个参与者系统,它使用Kafka或任何其他排队系统(如rabbitmq)中上述参与者推送的事件。在高级模型中,您甚至可以拥有完全隔离的系统,该系统由订阅分布式队列系统的参与者集群组成,并使用事件和持久性。