Акка кластер осколок в осколок - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть случай использования, когда одному шарду в кластере нужно попросить другой шард в том же кластере для получения какой-либо информации.

Я знаю, что могу получить ShardRegion, выполнив что-то вроде этого:

val counterRegion: ActorRef = ClusterSharding(system).shardRegion("Counter")

И затем сделайте мой запрос следующим образом:

counterRegion ? InfoRequest(entityIdShardId)

Но есть ли способ получить рефери актера области шарда от самого шарда?Похоже, это был бы более чистый и эффективный способ получить ActorRef.

1 Ответ

0 голосов
/ 15 декабря 2018

Указанный вами способ является правильным.

Можно вызвать context.parent в объекте шарда, и он возвращает ActorRef области шарда.Но это менее явный вариант, поскольку он основан на том факте, что область шарда является родительской для сущности шарда.

Я думаю, что вам следует продолжать использовать свой вариант.

Кроме того, независимо от вашего вопроса, вам следуетне используйте шаблон запроса в актерах.Это добавляет сложности при работе с Future и требует заданного времени ожидания.Просто используйте отправить / сказать или !.Вы можете обработать ответ, отправленный обратно актеру, в частичной функции receive.

...