【发布时间】:2022-01-13 16:02:21
【问题描述】:
是否有可能在Akka Actors 中安装某种“钩子”,允许您在每次有新消息到达actor 时运行一段自定义代码?注意,这不是actor开始使用receive处理消息的时刻,而是消息到达actor并被放入其邮箱的时刻。另请注意,我想更改默认行为,而不仅仅是单个演员的行为。理想情况下,我会在我的代码中仅在一个位置更改此行为,它会自动影响所有参与者,或者在每个文件/参与者中只需要 1-2 行代码(例如导入语句)。
例如,使用这个钩子应该可以在每次消息到达时记录消息,或者计算和打印插入前后邮箱大小的斐波那契。
【问题讨论】:
-
如果
mailbox的日志记录和监控是主要要求,请考虑Kamon。否则,请使用@LeviRamsey 帖子中链接的最后一个主题中提到的自定义MailBox。那里给出了一个自定义邮箱的简单实现。试试看,然后在演员的enqueue、dequeue、receive等不同位置屏蔽代码,看看效果。 -
定义自定义邮箱的问题似乎是这锁定了我或其他人对邮箱的选择(我实现的那个)。我想保持代码原样,演员可以选择他们的邮箱类型,但我想为所有人添加我自己的代码。我觉得和
extend的原理差不多。 -
添加自定义邮箱或扩展邮箱具有相同的陷阱,因为如果您不小心可能会阻塞。顺便说一句,两者都可以在一个地方配置,
ActorSystem可以使用它。
标签: scala akka actor akka-actor