我的要求是使用Akka Persistent actor设计电子商务购物车。
我的计划是创建一个主Supervisor actor,它接收来自UI的所有请求,并为请求中的每个唯一cart_id创建一个CartActor的新版本。这样一来,每个购物车都由一个唯一的持久化actor表示购物车状态。
class CartActor extends PersistentActor{
var cart :Cart = null
override def receiveRecover: Receive = {
case addSkutoCartEvent(cart_id :UUID, sku_id:String, price :BigDecimal) =>{
addItemtoCart(cart_id,sku_id, price)
}
}
override def receiveCommand: Receive = {
case addSkuToCartCmd(cart_id , sku_id, price) => {
addItemtoCart(cart_id,sku_id, price)
}
}
在对特定购物车的请求中,我想将调用重定向到特定的演员以处理处理,我在创建时使用唯一的购物车ID作为演员的名字。
cartActor = system.actorOf(Props[CartActor],new_cart_id.toString)
通过
找到演员val future = system.actorSelection("/user/" + `cart_id.toString).resolveOne()`
问题是先前已经创建了一个actor,但由于一段时间不活动而终止了,我想恢复它以获得对该购物车更新的新请求。我希望能够恢复该actor并将此新请求传递给它。 但是由于CartActor只是一个定义并且对于所有化身都有一个唯一的持久性id,我将如何恢复代表该唯一购物车的特定购物车actor的事件。是否有办法为同一个actor定义的不同化身设置不同的持久性id ?