如何只处理来自儿童演员的消息?

How to only process messages from child actors?

我构建了一个 Akka FSM,它在其构造函数中生成了两个子 actor,并且只从其中一个接收消息。

val lhsRef: ActorRef = context.actorOf(Props(new PrimitiveNode(tpe)), "lhs")
val rhsRef: ActorRef = context.actorOf(Props(new PrimitiveNode(tpe)), "rhs")

在处理传入事件时,我想过滤来自 lhsNode 的事件。我尝试通过以下方式实现此目的:

when(WaitFor1) {
  case Event(event: SomeEventType, _) =>
    // Control flow reaches this point but...
    if (sender == lhsRef) {
      // ...it never enters the if clause.

这不起作用。事实上,senderlhsNode 并不相等,即使它肯定是 lhsNode 向我的 FSM 发送消息。

sender()        Actor[akka://default/user/$a#670517729]
lhsNode         Actor[akka://default/user/$a/$a/$b/lhs#-354253348]

我做错了什么?

只比较 senderlhs 的名称。检查消息是否真的由 lhsNode.

发送
sender.path.name == "lhs"

sender.path.name = lhsNode.path.name

确保 sender 只是 lhs 演员。 forward 如果中间涉及任何其他参与者,则为消息。

如下所示

when(WaitFor1) {
  case Event(event: SomeEventType, _) =>
    // ...
    if (sender.path.name == "lhs") {
      // ....

使用模式匹配守卫

when(WaitFor1) {
  case Event(event: SomeEventType, _) (if sender.path.name == "lhs") =>