Акка, как добраться до удаленных актеров в кластере

Сначала я хотел бы сказать, что я очень новичок в Akka и актерах:)

Я хотел бы создать распределенное приложение. Я разделю приложение на веб-часть (REST API) и часть управления пользователями. Но как правильно получить доступ к актеру из другой части приложения?

Я знаю, что могу получить доступ к выбору актера, указав его адрес ( https://doc.akka.io/docs/akka/2.5/remoting.html), но не могу найти способ где мне не нужно работать с адресами?

Я просто хочу создать систему, в которой очень легко связаться с удаленным актером, не используя его адреса.

2 ответа

Решение

В Cluster Sharding личность актера persistanceId и должен быть частью сообщения, которое вы отправляете всему кластеру. Вот почему вам нужно определить extractEntityId,

Подробнее читайте в документации: https://doc.akka.io/docs/akka/2.5/cluster-sharding.html

Может быть, вы можете посмотреть распределенную публикацию подписки в кластере

Но ограничение таково: ваша локальная система субъектов, на которой размещен ваш локальный субъект, и удаленная система субъектов, на которой размещен ваш удаленный субъект, должны быть настроены как akka cluster,

Если кластер может быть вашим дизайном, то вы можете сделать следующее:

Удаленная часть:

class Subscriber extends Actor with ActorLogging {
  import DistributedPubSubMediator.{ Subscribe, SubscribeAck }
  val mediator = DistributedPubSub(context.system).mediator
  // subscribe to the topic named "content"
  mediator ! Subscribe("content", self)

  def receive = {
    case s: String ⇒
      log.info("Got {}", s)
    case SubscribeAck(Subscribe("content", None, `self`)) ⇒
      log.info("subscribing")
  }
}

Локальная часть:

class Publisher extends Actor {
  import DistributedPubSubMediator.Publish
  // activate the extension
  val mediator = DistributedPubSub(context.system).mediator

  def receive = {
    case in: String ⇒
      val out = in.toUpperCase
      mediator ! Publish("content", out)
  }
}

Удаленная часть актера подписывается content topicи если локальная часть хочет общаться с удаленным, она может просто опубликовать сообщение content topic,

Надеюсь, это даст вам некоторые мысли.

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