我们现在正在使用Akka内存消息,并且没有节点集群。我们使用couchbase作为我们的处理后端,剩下足够的空间。
只要节点处于活动状态,一切正常。但是当任何节点发生故障时,所有内存中的消息都将丢失。我们确实通过实施“给我工作”的设计来减少它,其中工人演员在理想时要求工作并且在其队列中获得500条消息。但那些500仍然在记忆中。
有什么方法可以将couchbase用作每个邮箱的队列?老akka有耐用的邮箱,但现在已经不见了。持久性演员不解决这个问题。
答案 0 :(得分:0)
您可以做的是创建一种自定义邮箱实现,并将其绑定到actor配置中的相应actor /路由器。这在official documentation中有完美描述,例如 -
class MyPrioMailbox(settings: ActorSystem.Settings, config: Config)
extends UnboundedStablePriorityMailbox(
// Create a new PriorityGenerator, lower prio means more important
PriorityGenerator {
// 'highpriority messages should be treated first if possible
case 'highpriority => 0
// 'lowpriority messages should be treated last if possible
case 'lowpriority => 2
// PoisonPill when no other left
case PoisonPill => 3
// We default to 1, which is in between high and low
case otherwise => 1
})
简而言之,您创建了自己的邮箱,该邮箱由couchbase中的队列支持,您已完成。也许您需要弄清楚如何在actor之间拆分队列,并正确处理actor重启 - 但这与您正在使用的主管演员更相关。