Erstmal besten Dank für deine Rückmeldung.
@asgothian said in States und Threadsicherheit:
die Warteschlange bei jeder Anpassung durch persistState() sichern.
Das habe ich im Prinzip bereits versucht. In queueMessage wird nach jeder Änderung persistiert, in sendNext ebenfalls. Imho Tritt das Problem auf, wenn während eines Vorgangs auf dem State eine weitere State-Operation ausgeführt wird, etwa so:
modulA: queueMessage("hallo")
modulA->notificationService: loadState => state entspricht []
modulB: queueMessage("hallo2")
modulB->notificationService: loadState => alter state wird geladen, entspricht []
modulA->notificationService: persistState => state entspricht ["hallo"]
modulB->notificationService: persistState => state entspricht ["hallo2"]
modulC->sendNext() => "hallo2" // vereinfacht
Ich bräuchte gewissermaßen ein Statelock.
modulA: queueMessage("hallo")
modulA->notificationService: lockState
modulA->notificationService: loadState => state entspricht []
modulB: queueMessage("hallo2")
modulB->notificationService: lockState => muss warten
modulA->notificationService: persistState => state entspricht ["hallo"]
modulA->notificationService: unlockState
modulB->notificationService: lockState => lock wurde aufgehoben, jetzt geht es hier weiter
modulB->notificationService: loadState => state wird geladen, entspricht ["hallo"]
modulB->notificationService: persistState => state entspricht ["hallo", "hallo2"]
modulB->notificationService: unlockState
modulC->sendNext() => "hallo" // vereinfacht
@asgothian said in States und Threadsicherheit:
die Warteschlange als Skript globale Variable im Speicher halten, und nur beim Start des Skriptes aus dem Datenpunkt lesen
Bitte korrigiere mich, falls ich falsch liege, aber Globale Variablen gibt es doch im JavaScript-Adapter eigentlich nicht? Soweit ich den Adapter verstanden habe, wird der Code der Globale Scripte einfach oberhalb des Codes eines Modules (also pro *.ts, *.js Datei) eingefügt. Demzufolge hätte ich dann ja kein einzelne globale Variable, sondern mehrere. Die würden dann alle unterschiedliche Daten enthalten, oder gibt es hier noch ein Feature das ich nicht kenne?