使用不同的persistenceId创建akka持久化actor的多个化身?

时间:2016-12-16 07:22:38

标签: actor persistent-storage recover akka-persistence

我的要求是使用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 ?

0 个答案:

没有答案