【问题标题】:Forwarding messages to other Akka actors将消息转发给其他 Akka Actor
【发布时间】:2018-05-18 02:31:13
【问题描述】:

Scala 2.12 在这里使用 Akka。当我的一个演员收到特定类型的消息(例如,Fizzbuzz)时,我希望它按原样将该消息转发给少数其他演员:

我试过了:

class Foo extends Actor {
  override def receive: Receive = {
    case Bar =>
      println("Bar!")
    case Whitstle =>
      println("Whistle!")
    case Fizzbuzz =>
      val actor1 = context.actorSelection("/user/a1")
      val actor2 = context.actorSelection("/user/a2")
      val actor3 = context.actorSelection("/user/a3")

      actor1 ! _
      actor2 ! _
      actor3 ! _
  }
}

虽然它可以编译并且不会抛出任何异常,但它不起作用(3 个参与者都没有收到 Fizzbuzz 消息)。有什么想法吗?

【问题讨论】:

    标签: scala akka


    【解决方案1】:

    在接收块中,将您的消息收集到一个变量中,然后将该消息转发给其他参与者。请参考以下代码:-

    class Foo extends Actor {
      override def receive: Receive = {
        case Bar =>
          println("Bar!")
        case Whitstle =>
          println("Whistle!")
        case msg : Fizzbuzz =>
          val actor1 = context.actorSelection("/user/a1")
          val actor2 = context.actorSelection("/user/a2")
          val actor3 = context.actorSelection("/user/a3")
    
          actor1 ! msg 
          actor2 ! msg 
          actor3 ! msg 
      }
    }
    

    这应该可以解决您的问题。如果仍有任何疑问,请告诉我。

    【讨论】:

    • @hotmeatballsoup 你能试试这个方法吗?
    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    相关资源
    最近更新 更多