Проверить, существует ли актер в кластере akka

Я столкнулся со сценарием, в котором мне нужно проверить, существует ли конкретный субъект или нет, что можно сделать с помощью метода ActorSystem.actorSelection, указав путь к субъекту.

Однако этот метод работает правильно, когда такой субъект существует на вашем локальном узле . Если система акторов образована несколькими узлами, а актор существует на другом узле, этот метод сообщает, что актор не существует. Если я даю строку, определяющую удаленную систему-актер, этот метод работает. Но это кажется не очень хорошей идеей указывать строку удаленной системы акторов в методеactorSelection, поскольку узлы в кластере могут присоединяться и уходить.

def getOrCreate(customerId: String, deviceId: String): Future[ActorRef] = {
    context.system.actorSelection(s"/user/${customerId}{$deviceId}") ? Identify(deviceId) map {
    case ActorIdentity(`deviceId`, None) =>
      // create new actor
    case ActorIdentity(`deviceId`, Some(actor)) =>
      actor
  }
}

приведенный выше код отлично работает, когда субъект существует на локальном узле, чтобы проверить, существует ли субъект на каком-то другом узле в кластере, мне пришлось сделать что-то вроде:

def getOrCreate(customerId: String, deviceId: String): Future[ActorRef] = {
    context.system.actorSelection(s"akka.tcp://Relay@node1:3503/user/${customerId}{$deviceId}") ? Identify(deviceId) map {
    case ActorIdentity(`deviceId`, None) =>
      // create new actor
    case ActorIdentity(`deviceId`, Some(actor)) =>
      actor
  }
}



Есть ли лучший способ проверить, существует ли субъект во всем akka-кластере, а не только на локальном узле?


person Shailesh    schedule 23.01.2018    source источник


Ответы (1)


Похоже, вы хотите создать экземпляр актора только в том случае, если в кластере уже нет актора с таким идентификатором. Я считаю, что для этого лучше всего использовать сегментирование кластера Akka. и пусть Akka позаботится о создании и распространении экземпляров. Это также позаботится о маршрутизации любых сообщений актору на правильный узел, перераспределении акторов при изменении размера кластера и т. Д.

person lutzh    schedule 23.01.2018