【问题标题】:What is the best way to log all commands and responses in Akka.net?在 Akka.net 中记录所有命令和响应的最佳方式是什么?
【发布时间】:2020-05-30 21:39:20
【问题描述】:

从 Akka.net 集群记录所有命令和响应的最佳方式是什么?日志记录将由记录器参与者的层次结构处理,但这些记录器将如何接收或拦截各种命令和响应? 我尝试使用事件总线订阅特定命令,但这似乎不像我想的那样工作,因为没有命令被截获。

【问题讨论】:

    标签: c# logging actor akka.net


    【解决方案1】:

    在 Akka.NET 中,每个参与者都有自己的消息队列,用于对传入请求进行排序。有几种方法可以做到这一点:

    最简单的一种是创建自己的抽象actor类型,供系统中的所有其他actor使用,并覆盖它的AroundReceive方法——它可以让你用任何你想要的逻辑包装继承的actor接收处理程序:

    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);
        }
    }
    

    这也意味着,您需要为系统中使用的每个其他演员变体使用单独的类型,例如接收演员或持久演员。

    如果您想要开箱即用的解决方案 - 有一个名为 Phobos 的商业工具,它可以收集 Actor 系统内所有正在传输的消息的指标,记录它们,甚至跟踪它们之间的因果关系(也称为跟踪)。

    【讨论】:

    • 我喜欢它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 2020-01-27
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2010-09-06
    • 2010-12-19
    相关资源
    最近更新 更多