Использование Hazelcast MapListner в рамках кластера akka - PullRequest
0 голосов
/ 05 июля 2018

Я хочу добавить карту 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', чтобы создать нового актера.

Как мне теперь использовать actorOf для прикрепления appListner?

1 Ответ

0 голосов
/ 05 июля 2018

Вы не можете сделать это с вашим текущим кодом arch.

Здесь вы используете шаблон observer. Каждый раз, когда добавляется запись, вы хотите позвонить entryAdded в class appListner extends Actor. Но, к сожалению, функция AKKA никогда не может вызывать функцию извне напрямую. Так что вам нужно изменить свою арку.

Одна псевд логика может выглядеть следующим образом: вам нужно перейти на работоспособный код, просто подумайте.

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)
...