Как я могу создать ActorSelection из ActorContext [T] - PullRequest
0 голосов
/ 07 января 2020

За время, прошедшее со времени моего последнего проекта Akka, Akka перешла на более кластерный подход.

Мне нравятся шаблоны, которые предоставляет akka.actor.typed. Но я не строю кластерную систему. Я посмотрел на кластеризацию, но я думаю, что моя система слишком фрагментирована и более статична c, чем система, которая могла бы создать разумный кластер.

У меня есть кости системы, но я не могу образовывать связи, потому что Я не могу создать ActorSelections для подключения моих узлов. Я покопался в akka.actor.typed и не вижу пути к созданию ActorSelection.

Есть ли способ создать ActorSelection из всего, к чему у меня есть доступ в akka.actor.typed?

Есть ли другой способ получить адрес для удаленной системы акторов по известному порту?

Спасибо!

Ответы [ 2 ]

1 голос
/ 07 января 2020

Я вижу, вы выяснили, как прибегнуть к классическим c API, однако я бы порекомендовал вам ознакомиться с печатным регистратором для поиска актеров, а не возвращаться к поиску строк, так как они более хрупкие и дает довольно тесную связь.

Регистратор работает как в одной системе ActorSystem, так и в кластере без изменений. С помощью регистратора актер, который хочет предоставить услугу, регистрируется сам, используя набранный ключ. Актеры, желающие взаимодействовать с ним, могут подписывать или искать доступных актеров через ключ (или использовать групповой маршрутизатор, который будет отслеживать доступные акторы для ключа и направлять их).

См. Документы https://doc.akka.io/docs/akka/current/typed/actor-discovery.html#receptionist и https://doc.akka.io/docs/akka/current/typed/routers.html#group -рутер

0 голосов
/ 07 января 2020

После дополнительных раскопок я нашел ответ в Akka do c.
https://doc.akka.io/docs/akka/current/typed/coexisting.html

import akka.actor.typed.scaladsl.adapter._

val context: ActorContext[t]

context.toClassic.actorSelection("akka://actorSystemName@10.0.0.1:25520/user/actorName")
...