【问题标题】:Akka mailbox (queue) in couchbasecouchbase 中的 Akka 邮箱(队列)
【发布时间】:2016-09-19 05:03:14
【问题描述】:
我们现在正在使用带有内存消息的 Akka,并且没有节点集群。我们使用 couchbase 作为我们的处理后端,并留有足够的空间。
只要节点处于活动状态,一切正常。但是当任何节点出现故障时,所有内存中的消息都会丢失。我们确实通过实施“给我工作”类型的设计来减少它,在这种设计中,工人演员在理想时要求工作,并在其队列中获得 500 条消息。但是那 500 个仍然在内存中。
有什么方法可以使用 couchbase 作为每个邮箱的队列吗?较旧的 akka 有耐用的邮箱,但现在已经不见了。持久的actor并没有解决这个问题。
【问题讨论】:
标签:
java
akka
couchbase
akka-cluster
akka-persistence
【解决方案1】:
您可以做的是创建某种自定义邮箱实现,并将其绑定到参与者配置中的适当参与者/路由器。这在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 中的队列支持,然后您就完成了。也许您需要弄清楚如何在参与者之间拆分队列,并正确处理参与者重新启动 - 但这与您正在使用的主管参与者更相关。