【问题标题】:Akka Actors - Change default behavior of messages arriving in actorsAkka Actors - 更改到达 actor 的消息的默认行为
【发布时间】:2022-01-13 16:02:21
【问题描述】:

是否有可能在Akka Actors 中安装某种“钩子”,允许您在每次有新消息到达actor 时运行一段自定义代码?注意,这不是actor开始使用receive处理消息的时刻,而是消息到达actor并被放入其邮箱的时刻。另请注意,我想更改默认行为,而不仅仅是单个演员的行为。理想情况下,我会在我的代码中仅在一个位置更改此行为,它会自动影响所有参与者,或者在每个文件/参与者中只需要 1-2 行代码(例如导入语句)。

例如,使用这个钩子应该可以在每次消息到达时记录消息,或者计算和打印插入前后邮箱大小的斐波那契。

【问题讨论】:

  • 如果mailbox 的日志记录和监控是主要要求,请考虑Kamon。否则,请使用@LeviRamsey 帖子中链接的最后一个主题中提到的自定义MailBox。那里给出了一个自定义邮箱的简单实现。试试看,然后在演员的enqueuedequeuereceive等不同位置屏蔽代码,看看效果。
  • 定义自定义邮箱的问题似乎是这锁定了我或其他人对邮箱的选择(我实现的那个)。我想保持代码原样,演员可以选择他们的邮箱类型,但我想为所有人添加我自己的代码。我觉得和extend的原理差不多。
  • 添加自定义邮箱或扩展邮箱具有相同的陷阱,因为如果您不小心可能会阻塞。顺便说一句,两者都可以在一个地方配置,ActorSystem 可以使用它。

标签: scala akka actor akka-actor


【解决方案1】:

如果您控制actor的生成(或者愿意将此邮箱用作未专门设置邮箱的actor的默认邮箱),您可以使用自定义邮箱。见the docs for details

【讨论】:

  • 我已经编辑了这个问题,其中包含一些在原始问题中并不清楚的额外要求。这个解决方案是否仍然适用?
  • 点击 Levi 提供的链接,因为它确实解释了,是的,您可以更改默认邮箱。如果您在 Google 上搜索“Akka 邮箱日志记录要点”,您甚至可以找到一些代码来实现这一点。但是,我要提醒的一件事是,仅仅因为您可以添加此代码并不意味着您应该这样做。您正在将争用(并可能阻止行为)引入您的排队。如果您只是想监控邮箱的大小,还有比这更好的方法。
猜你喜欢
  • 1970-01-01
  • 2021-06-19
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多