Как лучше всего регистрировать все команды и ответы в Akka. net? - PullRequest
0 голосов
/ 15 февраля 2020

Как лучше всего регистрировать все команды и ответы от кластера Akka. net? Ведение журнала будет обрабатываться иерархией участников регистратора, но как эти регистраторы будут получать или перехватывать различные команды и ответы? Я пытался использовать шину событий для подписки на конкретные команды c, но, похоже, это не работает, как я думал, поскольку ни одна команда не перехватывается.

1 Ответ

0 голосов
/ 18 февраля 2020

В Акке. NET каждый актер имеет свою очередь сообщений, используемую для упорядочивания входящих запросов. Есть несколько способов сделать это:

Самый простой способ - создать свой собственный абстрактный тип актера, используемый всеми другими субъектами в вашей системе, и переопределить его AroundReceive метод - это позволит вам чтобы обернуть наследующие субъекты обработчики получения с любым видом логики c вы хотите:

class AppActor : ActorBase 
{
    protected readonly ILoggingAdapter logger = Context.GetLogger();

    protected override bool AroundReceive(Receive receive, object message) 
    {
        logger.Debug("Incoming request: {0}", message);
        return receive(message);
    }
}

Это также будет означать, что вам нужен отдельный тип для каждого другого варианта акторов, используемых в вашей системе, таких как получение актеры или постоянные актеры.

Если вы хотите нестандартное решение - есть коммерческий инструмент под названием Фобос , который может собирать метрики всех сообщений в полете внутри вашей актерской системы. их и даже проследить причинно-следственную связь между ними (отслеживание).

...