在Akka群集框架中使用Hazelcast MapListner

时间:2018-07-05 01:51:41

标签: 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 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?

1 个答案:

答案 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)