为Akka actor定义接收方法

时间:2018-05-13 13:25:40

标签: akka actor

来自Akka documentation

  

通过扩展Actor基本特征并实施receive方法来实现Actor。 receive方法应该定义一系列case语句(类型为PartialFunction[Any, Unit]),它定义了你的Actor可以处理的消息,使用标准的Scala模式匹配,以及消息应该如何实现处理。

代码:

class MyActor extends Actor {
  val log = Logging(context.system, this)

  def receive = {
    case "test" ⇒ log.info("received test")
    case _      ⇒ log.info("received unknown message")
  }
}

没有输入要接收,那么在case语句中匹配的内容是什么? 此外,PartialFunction[Any, Unit]如何进入图片?

2 个答案:

答案 0 :(得分:2)

演员是消息驱动的,input被提供给演员,就像发送到mailbox的消息一样。消息最常见的是sent to an actor tell !(即myActor ! "test" ),如:

receive

actor中的PartialFunction[Any, Unit]方法允许对消息进行模式匹配(通常按类型)以相应地处理它们。该方法的类型为case,因此:

  1. case i: Int => // do something with i case s: String => // do something with s // ... 模式匹配是一种部分功能,非常适合作为有效处理各种传入信息的筛选工具

  2. 它可以接收任何类型的消息,以任何必要的方式处理它们,并且不需要返回任何内容,例如:

    UnhandledMessage()
  3. 请注意,在unhandled messages的情况下,class C: @staticmethod def f(a, b): return a + b >>> C.f(2, 2) 4 将被发布到ActorSystem。

答案 1 :(得分:0)

传递给actor的消息是匹配的 例如:如果调用actor ! "message",则匹配"message"

见这里

https://alvinalexander.com/scala/how-to-communicate-send-messages-scala-akka-actors

PartialFunction[Any, Unit]因为它接受Any类型的参数但没有返回任何内容而进入画面。如果将"message"传递给actor,则String是传递给PartialFunction的参数类型。在模式匹配期间,它不会返回值。所以Unit返回类型。