我正在尝试使用AKKA FSM构建订单履行组件。对于状态如何存储以及用户事件的进一步发展,我几乎没有什么基本的疑问。
考虑状态
ORDER_CLEAN, ORDER_INIT, ORDER_PAYMENT_WAITING, ORDER_PAYMENT_SUCCESS, ORDER_DELIVERY, ORDER_COMPLETE
事件
EV_CART_CHECKOUT, EV_PROCEED_PAYMENT, EV_PAYMENT_SUCCESSFUL, EV_ITEMS_PACKED, EV_DELIVERED
状态更改为
(EV_CART_CHECKOUT, ORDER_CLEAN) -> ORDER_INIT
(EV_PROCEED_PAYMENT, ORDER_INIT) -> ORDER_PAYMENT_WAITING
(EV_PAYMENT_SUCCESSFUL, ORDER_PAYMENT_WAITING) -> ORDER_PAYMENT_SUCCESS
(EV_ITEMS_PACKED, ORDER_PAYMENT_SUCCESS) -> ORDER_DELIVERY
(EV_DELIVERED, ORDER_DELIVERY) -> ORDER_COMPLETE
问题
当我们使用事件ORDER_CLEAN
创建从EV_CART_CHECKOUT
开始的FSM演员时,这个演员是否还活着,直到我们把它带到ORDER_COMPLETE
(假设我们在此状态下停止演员)州?
如果是,那么在这种情况下,当我们在数据库中存储订单状态时,我们如何在该actor上触发新事件?我们需要将order_id
维护为actor映射和触发事件吗?如果当前正在处理 10K 唯一订单,那么我们维护所有 10K 演员的映射是什么呢?如果是这样,对于大量订单维护这些映射的最佳数据结构是什么?
继续到第二点,如果演员如何将演员带回同一州,该怎么办?主管演员只有办法解决这个问题吗?或者我们是否需要检查演员身份然后发送事件?
在状态的任何一点,用户可能不会触发下一个事件可能是好几天,那么让演员活得这么长时间是好还是创建具有更新状态的新演员好吗?
使用akka FSM解决这些问题的更好方法是什么
答案 0 :(得分:0)