Должны ли контролируемые субъекты в Akka получать сообщения напрямую или через своего руководителя?
Недавно я посмотрел отличное видео Риккардо Террелла об Akka.NET и F#, но вопрос, который я собираюсь задать, относится к Akka в целом. Я был озадачен тем, что он обсуждает стратегию супервизора и супервизора на предмет ошибок. В его примерах клиенты отправляют сообщения супервизору, который перенаправляет их работающему актеру, вызывая worker.Tell(msg, mailbox.Sender()). Интересно, насколько распространена такая практика? В нашей системе есть несколько мест, в которых клиент сначала просит у руководителя получить экземпляр работника, а затем совершает вызовы Tell напрямую работнику. Я не доволен использованием Ask, но в нашем случае нам нужна рабочая близость, т. Е. Сообщения от одного и того же клиента могут нуждаться в маршрутизации одному и тому же работнику, поэтому предоставление клиенту рабочего экземпляра упрощает это. Но опять же, Спросите плохо. Так что в случае контролируемых актеров, они должны получать сообщения через супервизора (чтобы избежать Ask) или "это зависит"?
1 ответ
Одним из решений может быть использование пула хеширования при использовании простой функции хеширования, поэтому вы можете исключить отправку обратных ссылок в asker.
new ConsistentHashingPool(5).WithHashMapping(o =>
{
if (o is IHasCustomKey)
return ((IHasCustomKey)o).Key;
return null;
});
Любые комментарии приветствуются!