对多个并发实例使用AKKA-FSM

对多个并发实例使用AKKA-FSM,akka,fsm,akka-persistence,akka-fsm,Akka,Fsm,Akka Persistence,Akka Fsm,请给我一些明智的建议 我有一个简单的订单管理FSM,有六个州。我正在规范我的系统,以支持高峰时每小时10K订单。每个订单将需要10到120秒来遍历FSM。某些转换将调用第三方API。还有一个持久性数据存储来保存有关订单和进度的信息 我正在考虑使用AKKA FSM,每个并发订单使用一个FSM实例。在我花太多的时间在这个项目上之前,我正在寻找一个健全的检查,如果不是一个愚蠢的想法,我会很感激任何我应该特别注意的领域的指点 谢谢你的帮助 将每个订单表示为FSM参与者应该可以。我的“一点建议”是,如果任

请给我一些明智的建议

我有一个简单的订单管理FSM,有六个州。我正在规范我的系统,以支持高峰时每小时10K订单。每个订单将需要10到120秒来遍历FSM。某些转换将调用第三方API。还有一个持久性数据存储来保存有关订单和进度的信息

我正在考虑使用AKKA FSM,每个并发订单使用一个FSM实例。在我花太多的时间在这个项目上之前,我正在寻找一个健全的检查,如果不是一个愚蠢的想法,我会很感激任何我应该特别注意的领域的指点


谢谢你的帮助

将每个订单表示为FSM参与者应该可以。我的“一点建议”是,如果任何第三方API调用被阻塞或长时间运行,则将这些调用委托给在专用调度程序上运行的其他参与者,如前所述

例如,以下参与者进行阻塞调用,模拟使用第三方API,并将该调用的结果发送给发送方:

类LegacyApiActor扩展了Actor{
隐式val executionContext:executionContext=
context.system.dispatchers.lookup(“我的阻塞调度器”)
def接收={
case MakeApiCall=>
val currentssender=sender()
未来{
线程。睡眠(10000)
currentSender!ApiResult(“结果”)
}
}
}
下面是FSM参与者的摘录,该参与者的状态等待API调用的结果,其中
legacyActor
是对
legacyActor
的引用:

onTransition{
案例SomeState->WaitForLegacyApirect=>
legacyActor!让我来
案例
}
何时(WaitForLegacyApireult){
案例事件(ApiResult(res),…)=>//来自legacyActor的响应
转到(不同的状态)。。。
}

重申这一点,不要在订单/FSM参与者中进行阻塞或长时间运行的呼叫;隔离使用专用调度器的其他参与者的呼叫。

问题是什么?