Scala 如何查询大量Akka参与者并将结果存储在数据库中?
我正在Scala/Akka建立一个证券交易模拟器。每个Scala 如何查询大量Akka参与者并将结果存储在数据库中?,scala,akka,Scala,Akka,我正在Scala/Akka建立一个证券交易模拟器。每个TraderActor都有一个var-wealth,随着参与者通过市场进行交易而随时间波动 在不同的时间间隔内,我想查询所有的TradingActors,以获得其各自“财富”的当前价值,并将所有结果存储在数据库中以供以后分析。我如何才能做到这一点呢?我会发送一条StoreMessage,告诉TraderActors通过一些StoreData消息将他们的wealth值发送给StoreControlleractor ref StoreContro
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)中上述参与者推送的事件。在高级模型中,您甚至可以拥有完全隔离的系统,该系统由订阅分布式队列系统的参与者集群组成,并使用事件和持久性。