Мы используем источник событий с помощью Akka Persistence, расширяя EventSourcedBehavior. Когда мы создаем персистентного субъекта, мы присваиваем ему уникальное имя, используя uuid (то же самое, что мы используем внутри create
для построения PersistenceId
для разделения сущностей):
UUID uuid = UUID.randomUUID();
String name = MyBehavior.nameFor(uuid);
ActorRef<Command> actorRef =
context.spawn(MyBehavior.create(uuid), name);
Позже, когда мы хотим отправить дальнейшие команды актеру, мы хотели бы получить ActorRef<Command>
из контекста, поскольку ссылка на объект actorRef
, возвращаемая spawn
, больше не будет находиться в области видимости. Думайте о командах как о результатах последующих HTTP-запросов.
Мы не можем использовать context.getChild(name)
, поскольку он возвращает ActorRef<Void>
.
Мы также рассматривали обнаружение акторов с помощью Receptionist, но документация говорит, что она не масштабируется до любого количества актеров:
https://doc.akka.io/docs/akka/current/typed/actor-discovery.html#receptionist -scalability
С другой стороны, ActorSelection не поддерживается в типизированных, в соответствии с следующая ссылка:
https://doc.akka.io/docs/akka/current/typed/from-classic.html#actorselection
Мы не уверены в правильном подходе здесь. Любая помощь будет высоко ценится.