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

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

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

def getOrCreate (customerId: String, deviceId: String): Future [ActorRef] = {
    context.system.actorSelection (s "/ user / $ {customerId} {$ deviceId}")? Карта идентификатора (ID устройства) {
    case ActorIdentity(`deviceId`, None) =>
      // создаем нового актера
    case ActorIdentity(`deviceId`, Some(actor)) =>
      актер
  }
}

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

def getOrCreate (customerId: String, deviceId: String): Future [ActorRef] = {
    context.system.actorSelection (s "akka.tcp: // Relay @ node1: 3503 / user / $ {customerId} {$ deviceId}")? Карта идентификатора (ID устройства) {
    case ActorIdentity(`deviceId`, None) =>
      // создаем нового актера
    case ActorIdentity(`deviceId`, Some(actor)) =>
      актер
  }
}



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

1 ответ

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

Другие вопросы по тегам