0

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

我究竟做错了什么?

4

1 回答 1

1

sender仅比较和的名称lhs。检查消息是否真的由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") =>
于 2016-10-16T14:24:47.413 回答