繁体   English   中英

如何在 Akka Actor 中检查消息是否具有发件人

[英]How to check if message has sender in Akka Actor

有时发送给演员的消息没有发送者,例如,如果它们是这样发送的:

actorRef.tell(Message(...), Actor.noSender)

一个用例是表明您对此Message的响应不感兴趣。

在 Actor 的receive方法中,如何检查sender()是否是 Actor,而不是noSender

我想出的最好的是基于演员路径的以下测试,但我不确定我是否可以依靠它在所有情况下和未来的变化、Akka 集群等中工作。

if(sender.path.elements != "deadLetters" :: Nil) ...

如果没有发件人,我不希望响应转到deadLetters ,因为在我的系统中,我将未传递的消息视为出现问题的警告。

有没有更好更可靠的方法来检查是否有发件人?

我找到了解决方案:

val hasSender = sender != context.system.deadLetters

一般来说,更好的模式是在你的消息中添加一个replyTo: Option[ActorRef] ,所以这更明确。

我在 Java 领域工作,需要类似的东西来记录发件人。 我还在一个无法访问 Akka 上下文的 util 类中工作——我只有一个传递的 ActorRef。 去了:

actorRef instanceof DeadLetterActorRef ? "[no-sender]" : actorRef.path().toStringWithoutAddress()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM