Как добавить акторов во время выполнения в группу или пул в akka.net при использовании ConsistentHashmapping?

Я хочу добавлять и удалять участников в пул (группу?), Которые должны получать сообщения через маршрутизатор с использованием согласованного сопоставления хэшей (сообщение имеет идентификатор, соответствующий пути объекта). Но после создания пула возвращается только IActorRef, и я не знаю, как «рассказать» о добавлении новых Актеров.

Я прочитал несколько руководств и советов по маршрутизации, например это: https://github.com/petabridge/akka-bootcamp/tree/master/src/Unit-3/lesson2, но они не подходят.

Может мне самому написать свой роутер с этими сообщениями?


person Beachwalker    schedule 10.02.2017    source источник
comment
В общем, добавление акторов к консистентным хеш-маршрутизаторам во время выполнения настоятельно не рекомендуется, если вы действительно не знаете, что делаете. По мере того, как вы добавляете/удаляете акторов в непротиворечивое хеш-кольцо, диапазоны хэшей, за которые отвечает каждый из существующих акторов, будут меняться. Это означает, что некоторые сообщения, которые ранее обрабатывались одним актором, теперь будут обрабатываться другим.   -  person Bartosz Sypytkowski    schedule 12.02.2017
comment
Почему так? При использовании группы это просто другой способ направления сообщения обработчику. Я мог бы поговорить с актером напрямую или использовать выбор актера (на основе личности). Маршрутизация — это просто стратегия с критериями для поиска актора. Не могли бы вы привести пример таких задач? Я хочу управлять списком сущностей, не завися от содержимого сообщения.   -  person Beachwalker    schedule 12.02.2017
comment
... Я мог бы использовать определенного актера-менеджера, который перенаправляет все входящие сообщения соответствующему IActorRef на основе идентификатора в словаре, а не выбора актера.   -  person Beachwalker    schedule 12.02.2017
comment
Непротиворечивый хэш направляет сообщение действующему лицу не в отношениях «один к одному», а в отношении «многие к одному». Это обычное недоразумение. Я описал это более подробно здесь.   -  person Bartosz Sypytkowski    schedule 12.02.2017


Ответы (1)


В пакете Akka.Routing есть предопределенные сообщения, которые позволяют добавлять и удалять новые маршруты. вы можете найти строки кода в Akka.net здесь. Например, следующий код добавляет IActorRef к существующему маршрутизатору (я тестировал это с помощью ConsistentHashingGroup):

var routee = Routee.FromActorRef(actor);
router.Tell(new AddRoutee(routee));

Немного раздражает, что мне пришлось сканировать исходный код, чтобы найти способ, как это сделать, потому что он не является частью буткемпа petabridge (или я проглядел его?), и я не нашел ответа нигде, хотя я Думаю, это очень типичный и распространенный сценарий. Документация несколько рудиментарна в этой области.

Надеюсь, это поможет кому-то сэкономить несколько минут жизни и сделать что-то более интересное в области программного обеспечения для разработки с Akka.net вместо того, чтобы искать, как использовать эту структуру. ;-)

person Beachwalker    schedule 10.02.2017