[英]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.