Акка, как добраться до удаленных актеров в кластере
Сначала я хотел бы сказать, что я очень новичок в 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
,
Надеюсь, это даст вам некоторые мысли.