正如我在akka规范中所读到的,它在actors中支持mdc。例如,我可以将unic信息放在mdc中,然后在actor中使用它。但是期货呢?akka是否提供了任何保证,即在actor中启动的未来将具有相同的mdc?另外,发送给其他参与者的消息呢?默认情况下是否复制了MDC?
注意事项
对我来说,这看起来很奇怪,我只能在一个参与者代码中使用MDC。
他们可以,但实际上没有。当你调用LoggingAdapter的成员时,你实际上调用actor的成员:
package akka.event
trait LoggingAdapter {// and it's implementations DagnosticLoggingAdapter, BusLoggingAdapter
type MDC = Logging.MDC
def mdc = Logging.emptyMDC
def notifyError(message: String): Unit = bus.publish(Error(logSource, logClass, message, mdc))
...
}
所以你在这里访问演员的成员。每次处理请求之前都会设置此成员:
package akka.actor
trait DiagnosticActorLogging extends Actor {
...
override protected[akka] def aroundReceive(receive: Actor.Receive, msg: Any): Unit = try {
log.mdc(mdc(msg))
super.aroundReceive(receive, msg)
} finally {
log.clearMDC()
}
}
因此,如果您从未来访问它(另一个线程可能与其他消息同时运行)-不能保证您为您的消息选择mdc。与接收器相同的问题,但更深,因为您无法轻松捕获额外的mdc信息。
P. S.akka可以更聪明,以隐式方式获取mdc信息,因此您可以将其捕获为闭包,类似于:
implicit val metaMdc = getMetaMdc
Future {
log.warning(...)
}
这里的问题是Akka必须在每次登录时将此metaMdc附加到当前线程的mdc(或者您必须以某种方式初始化它),因为SLF4J的mdc是线程本地的,所以每个线程都不同。所以,Akka不知道你要用哪个物理MDC来执行你的log.warning(...)
。
我很难弄清楚我如何知道我的演员何时从非演员代码中完成。 尝试使用akka演员进行并行执行,这似乎真的很好,但我需要知道何时所有人都完成了。 我添加了一个监督者演员,产生演员来做工作,从监督者/父演员,我可以观看孩子的终止消息。 我需要从akka actor系统之外的常规java代码中得到帮助,以确定我的监督actor是否完成。 这是否可能,请提供指针。 谢谢哈瑞
我有一个AKKA模型,有一个主管演员,他创造了许多儿童演员。子参与者将处理一个事件并将消息发送到另一个服务(例如Kafka topic)。 目前,我有一个静态共享类,它在子参与者之间共享以发送消息,但在参与者模型中,我认为最好使用参与者来实现这一目的。 我想知道我如何才能创造一个演员,儿童演员可以分享它。如果supervisor actor创建了MessagePublisher actor,那么孩
我正在尝试使用类型化执行器版本2.6.3和akka http版本10.1.11,而在非类型化执行器中都运行良好,现在我得到了编译错误
我遇到了一个场景,我需要检查特定的参与者是否存在,这可以通过ActorSystem完成。actorSelection方法,指定参与者路径 但是,当本地节点上存在此类参与者时,此方法可以正常工作。若actor系统由多个节点组成,并且actor存在于另一个节点上,则该方法告诉我们actor不存在。若我给出指定远程参与者系统的字符串,那个么这个方法可以工作。但在actorSelection方法中指定远程
我正在尝试在Scala上实现AKKA http和一些Actor。我用Akka创建了一个web应用程序。但我在一个或两个不同的路由上有这个错误/16。(显然是随机的): 服务器无法及时响应您的请求。请稍后再试! 你能给我解释一下为什么和怎么修吗?我对Akka真的是新手。 主类:
我正在学习Akka,我正在努力寻找一个好的模式来在整个演员层次结构中共享一个单一的、有限的资源。 我的用例是,我有一个HTTP RESTendpoint,在任何时候,我只能同时连接到该endpoint10个连接。不同层次结构级别的不同参与者需要能够进行HTTP REST调用。我使用非阻塞I/O发出HTTP请求(AsyncHttpClient)。 显而易见的解决方案是让一个参与者负责这个REST资源