在akka集群框架中使用Hazelcast MapListner

在akka集群框架中使用Hazelcast MapListner,akka,akka-cluster,hazelcast-imap,Akka,Akka Cluster,Hazelcast Imap,我想添加一张Hazelcast地图` class appListner extends Actor with EntryAddedListener[String, String]{ override def entryAdded(event: EntryEvent[String, String]): Unit = { logger.info("Entry Added:" + event) // i want to update my local cache using

我想添加一张Hazelcast地图`

class appListner extends Actor with EntryAddedListener[String, String]{
  override def entryAdded(event: EntryEvent[String, String]): Unit = {
      logger.info("Entry Added:" + event)
      // i want to update my local cache using the event.value
      updateLocalcache(event.getValue) // which is in turn needs to update the cache implemented using actor

    }

}
我附上地图列表如下

addEntryListener(new appListner(), true)
我在运行时遇到一个错误,说您不能显式使用构造函数(new)创建[appListener]的实例。您必须使用“actorOf”工厂方法之一来创建新的参与者


现在如何使用actorOf来连接appListner?

您无法使用当前的代码实现这一点

您在这里使用的是
observer
模式。每次添加条目时,您都希望在
类appListner extensed Actor
中调用
entryAdded
。但不幸的是,外部无法通过AKKA design直接调用actor中的函数。所以你需要改变你的足弓

一个伪逻辑可能如下所示,您需要更改为可行的代码,只需提供一个想法

class CacheImplementedUsingActor extends Actor {
  def receive = {
    case eventValue => UpdateCacheNowWithEventValue
  }
}

class appListner(val cacheActor: ActorRef) with EntryAddedListener[String, String] {
  override def entryAdded(event: EntryEvent[String, String]): Unit = {
    logger.info("Entry Added:" + event)
    // i want to update my local cache using the event.value
    updateLocalcache(event.getValue)
  }

  def updateLocalcache(eventValue: String) {
    // which is in turn needs to update the cache implemented using actor
    cacheActor ! eventValue
  }
}

val system = ActorSystem("mySystem")
val cacheActor = system.actorOf(Props[CacheImplementedUsingActor])
addEntryListener(new appListner(cacheActor), true)