我想在一个节目中使用演员,在这个节目中,我会对一些演员进行某种限制,就好像他们是队列一样。例如,假设我有一些应用更改事件的外部系统以及一些外部系统数据的缓存。所以我有2个演员:
ChangeApplicationActor
CacheActor
作为 的一部分ChangeApplicationActor
,当我对外部系统中的某个实体应用更改时X
,我想发送一些事件来告诉CacheActor
同步:
val changeApplicationActor = actor {
loop {
react {
case ChangeInstruction(x) =>
externalSystem.applyChange(x)
cacheActor ! Sync(x)
}
}
}
但我现在有两个要求:
- 具有
CacheActor
内部状态,理想情况下我希望它Sync
按顺序处理其指令 - 如果我最终在
CacheActor
收件箱中包含两个Sync(x)
相同值的指令x
,那么我想忽略第二个(即Sync
对于任何给定的值,我应该只有一个待处理指令x
)
有没有办法强制一个演员是单线程的?有什么方法可以访问演员的邮箱并删除任何重复的事件?我不能避免实现CacheActor
as, um, not an Actor吗?