我想添加一个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)
运行时出现错误,提示您无法使用构造函数(新)显式创建[appListener]实例。必须使用'actorOf'工厂方法之一来创建新的actor。
我现在如何使用actorOf来附加appListner?
答案 0 :(得分:1)
您不能用当前的代码拱门做到这一点。
您在此处使用observer
模式。每次添加条目时,您都想在entryAdded
中调用class appListner extends Actor
。但是不幸的是,AKKA设计永远无法从外部直接调用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)