如何只处理来自子actor的消息?

时间:2016-10-16 14:16:33

标签: scala akka akka-fsm

我构建了一个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]

我做错了什么?

1 个答案:

答案 0 :(得分:1)

仅比较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") =>