akka - 为 Akka 演员定义接收方法
问题描述
来自Akka 文档:
Actor 是通过扩展
Actor
基本特征并实现receive
方法来实现的。该receive
方法应该定义一系列 case 语句(类型为PartialFunction[Any, Unit]
),使用标准 Scala 模式匹配定义您的 Actor 可以处理的消息,以及应该如何处理消息的实现。
代码:
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 是消息驱动的,并且input
像发送到邮箱的消息一样被馈送到 Actor 。消息最常通过即发即弃(即)发送给参与者,例如:tell
!
myActor ! "test"
Actor 中的receive
方法允许对消息进行模式匹配(通常按类型)以相应地处理它们。该方法具有以下类型PartialFunction[Any, Unit]
:
case
模式匹配是一个偏函数,非常适合作为筛选工具来有效处理各种类型的传入消息它可以接收任何类型的消息,以任何必要的方式处理它们,并且不需要返回任何东西,例如:
case i: Int => // do something with i case s: String => // do something with s // ...
请注意,在未处理的消息的情况下,在幕后anUnhandledMessage()
将被发布到 ActorSystem。
推荐阅读
- git - 提供从机器访问 Github 私有仓库的权限
- javascript - Jquery中的本地存储和表单
- python - Django:如何在一个模板中使用超过 2 个基于类的通用视图
- python - 如何使用另一个类连接和断开 matplotlib 的事件处理程序?
- java - 为什么在一次完整 gc 后提升和幸存者内存大小会增加
- python - 如何从主机浏览器访问 Virtualbox Python Flask 服务?
- sql - 从另一个选择中选择填充缺失值的 SQL 查询
- python - 傅里叶如何变换一个 1 和 0 的数组
- ios - iOS中嵌入框架在签名时会产生错误
- proxy - 尝试在代理后面连接时,“c8ycli 服务器”返回错误