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

How to check if message has sender in Akka Actor

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

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

一个用例是表明您对此不感兴趣Message

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

我想到的最好的是以下基于 actor 路径的测试,但我不确定我是否可以依靠它来处理所有情况和未来的变化、Akka 集群等

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

如果没有发件人,我不希望回复转到 deadLetters,因为在我的系统中,我将未送达的邮件视为出现问题的警告。

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

我找到了解决方案:

val hasSender = sender != context.system.deadLetters

通常更好的模式是在您的消息中添加 replyTo: Option[ActorRef],这样更明确。

我在 Java-land 工作,需要类似的东西来记录发件人。我还在无法访问 Akka 上下文的 util class 中工作——我只有一个已通过的 ActorRef。一起去:

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