【发布时间】:2020-05-30 21:39:20
【问题描述】:
从 Akka.net 集群记录所有命令和响应的最佳方式是什么?日志记录将由记录器参与者的层次结构处理,但这些记录器将如何接收或拦截各种命令和响应? 我尝试使用事件总线订阅特定命令,但这似乎不像我想的那样工作,因为没有命令被截获。
【问题讨论】:
从 Akka.net 集群记录所有命令和响应的最佳方式是什么?日志记录将由记录器参与者的层次结构处理,但这些记录器将如何接收或拦截各种命令和响应? 我尝试使用事件总线订阅特定命令,但这似乎不像我想的那样工作,因为没有命令被截获。
【问题讨论】:
在 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 系统内所有正在传输的消息的指标,记录它们,甚至跟踪它们之间的因果关系(也称为跟踪)。
【讨论】: