在akka集群框架中使用Hazelcast MapListner
我想添加一张Hazelcast地图`在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
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)