为 Akka actor 定义接收方法
Defining receive method for Akka actor
Actors are implemented by extending the Actor
base trait and implementing the receive
method. The receive
method should define a series of case statements (which has the type PartialFunction[Any, Unit]
) that defines which messages your Actor can handle, using standard Scala pattern matching, along with the implementation of how the messages should be processed.
代码:
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]
是怎么出现在这里的?
传递给演员的消息是匹配的
例如:如果调用 actor ! "message"
,则匹配 "message"
。
看这里
https://alvinalexander.com/scala/how-to-communicate-send-messages-scala-akka-actors
PartialFunction[Any, Unit]
出现是因为它接受 Any
类型的参数但不接受 return 任何东西。如果 "message"
被传递给 actor,那么 String
就是传递给 PartialFunction
的参数类型。在模式匹配期间,它不会 return 一个值。所以 Unit
return 输入。
Actor 是消息驱动的,input
像通过即发即弃 tell
发送给 mailbox. Messages are most commonly sent to an actor 的消息一样馈送到 actor(即 !
), 比如:
myActor ! "test"
Actor 中的 receive
方法允许对消息进行模式匹配(通常按类型)以相应地处理它们。该方法的类型为 PartialFunction[Any, Unit]
,因此:
case
模式匹配,这是一个部分功能,非常适合作为一种筛选工具,有效处理各种类型的传入消息
它可以接受任何类型的消息,以任何必要的方式处理它们并且不需要 return 任何东西,例如:
case i: Int => // do something with i
case s: String => // do something with s
// ...
请注意,在 unhandled messages 的情况下,在引擎盖下 UnhandledMessage()
将发布到 ActorSystem。
Actors are implemented by extending the
Actor
base trait and implementing thereceive
method. Thereceive
method should define a series of case statements (which has the typePartialFunction[Any, Unit]
) that defines which messages your Actor can handle, using standard Scala pattern matching, along with the implementation of how the messages should be processed.
代码:
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]
是怎么出现在这里的?
传递给演员的消息是匹配的
例如:如果调用 actor ! "message"
,则匹配 "message"
。
看这里
https://alvinalexander.com/scala/how-to-communicate-send-messages-scala-akka-actors
PartialFunction[Any, Unit]
出现是因为它接受 Any
类型的参数但不接受 return 任何东西。如果 "message"
被传递给 actor,那么 String
就是传递给 PartialFunction
的参数类型。在模式匹配期间,它不会 return 一个值。所以 Unit
return 输入。
Actor 是消息驱动的,input
像通过即发即弃 tell
发送给 mailbox. Messages are most commonly sent to an actor 的消息一样馈送到 actor(即 !
), 比如:
myActor ! "test"
Actor 中的 receive
方法允许对消息进行模式匹配(通常按类型)以相应地处理它们。该方法的类型为 PartialFunction[Any, Unit]
,因此:
case
模式匹配,这是一个部分功能,非常适合作为一种筛选工具,有效处理各种类型的传入消息它可以接受任何类型的消息,以任何必要的方式处理它们并且不需要 return 任何东西,例如:
case i: Int => // do something with i case s: String => // do something with s // ...
请注意,在 unhandled messages 的情况下,在引擎盖下 UnhandledMessage()
将发布到 ActorSystem。