一部のアクターをキューであるかのように扱うことに関して何らかの制限があるプログラムでアクターを使用したいと思います。たとえば、変更イベントが適用される外部システムと、外部システムのデータのキャッシュがあるとします。だから私は2人の俳優を持っています:
ChangeApplicationActor
CacheActor
の一部として、外部システムのChangeApplicationActor
エンティティに変更を適用するときに、イベントを送信して に同期X
するよう伝えたいと考えています。CacheActor
val changeApplicationActor = actor {
loop {
react {
case ChangeInstruction(x) =>
externalSystem.applyChange(x)
cacheActor ! Sync(x)
}
}
}
しかし、私には2つの要件があります。
- には内部状態があり、理想的にはその命令を順番
CacheActor
に処理したいSync
- の同じ値に対する
CacheActor
2 つの命令を含む の受信トレイになってしまった場合、2 番目の命令は無視したいと思います (つまり、 の任意の値に対して保留中の命令は 1 つだけにする必要があります) 。Sync(x)
x
Sync
x
アクターを強制的にシングルスレッドにする方法はありますか? アクターのメールボックスにアクセスして、重複したイベントを削除する方法はありますか? CacheActor
as, um, not an Actorの実装を避けることはできませんか?