Ich möchte Schauspieler in einem Programm verwenden, in dem ich einige Einschränkungen bezüglich der Behandlung einiger Schauspieler habe, als wären sie Warteschlangen. Angenommen, ich habe ein externes System, auf das Änderungsereignisse angewendet werden, und auch einen Cache für die Daten des externen Systems. So habe ich 2 Schauspieler:Scala-Schauspieler als single-threaded-Warteschlangen
ChangeApplicationActor
CacheActor
Im Rahmen der ChangeApplicationActor
, wenn ich eine Änderung zu einem gewissen Einheit X
im externen System anwenden, mag ich ein Ereignis schicken sagen die CacheActor
zu synchronisieren:
val changeApplicationActor = actor {
loop {
react {
case ChangeInstruction(x) =>
externalSystem.applyChange(x)
cacheActor ! Sync(x)
}
}
}
Aber ich habe jetzt zwei Anforderungen:
- Die
CacheActor
verfügt über einen internen Zustand und im Idealfall würde Ich mag es seineSync
Befehle sequentiell - Wenn ich mit der
CacheActor
‚s Posteingang ich am Ende zu verarbeiten für den gleichen Wert vonx
, dann mit zweiSync(x)
Anweisungen würde gerne den zweiten ignorieren (d. h Ich sollte nur eine anhängigeSync
Anweisung für einen bestimmten Wert vonx
) haben
Gibt es eine Möglichkeit, einen Schauspieler zu zwingen, single-threaded zu sein? Gibt es eine Möglichkeit, auf das Postfach des Akteurs zuzugreifen und doppelte Ereignisse zu entfernen? Kann ich nicht vermeiden, die CacheActor
als, um, kein Schauspieler zu implementieren?
Natürlich könnte mein CacheActor nur ein dünner Wrapper um einen internen Thread plus Nachrichtenwarteschlange sein. Ich habe mich gefragt, ob es eine "elegantere" Lösung gibt. –