Action Queues + Concurrency¶
Wenn Actions sich gegenseitig im Weg stehen oder gleichzeitig laufen sollen — die Queue-Konfiguration entscheidet.
Doku: https://docs.streamer.bot/guide/core/actions
Konzepte¶
| Begriff | Bedeutung |
|---|---|
| Queue | Warteschlange für Action-Ausführung |
| Non-Blocking | Actions starten sofort, parallel zueinander |
| Blocking | Actions warten bis die vorherige fertig ist |
| Concurrent (CC) | Sub-Actions INNERHALB einer Action laufen parallel statt sequentiell |
| Always Run | Action läuft auch wenn Queue pausiert |
Standard-Queue vs Custom Queues¶
Default-Queue: "Non-Blocking" — alle Actions starten sofort. Was passt für 90% der Fälle.
Custom Queues in SB anlegen:
1. Action-Editor → Settings → Queue → Dropdown öffnen → + Create Queue
2. Name, Typ (Blocking/Non-Blocking), Concurrent-Settings
Wann Blocking Queue nutzen¶
Use-Case A: Alert-Pipeline¶
Bei Sub/Bits sollen Alerts NICHT überlappen — ein Alert fertig, dann nächster.
Wenn jetzt 3 Subs gleichzeitig kommen: erste Alert läuft, zweite wartet, dritte wartet. Sauber.
Use-Case B: OBS Source-Toggle-Sequenzen¶
OBS-Source-Show → Delay → Hide. Wenn parallel laufen würde, hidet die Action vorzeitig.
Use-Case C: Heart-Rate-Updates¶
HR pulsed 1× pro Sekunde. Wenn jedes Update eine schwere Action triggert (OBS, Discord, TTS), Backlog wächst.
Lösung: separate Queue für HR mit Blocking + Single-Concurrency. Wenn vorherige noch nicht fertig, neue wird verworfen oder geskip't (je nach Queue-Config).
Action Concurrent (CC)¶
Standard: Sub-Actions laufen sequentiell (oben nach unten, eine nach der anderen).
Mit Concurrent = ✅ (im Action-Editor): alle Sub-Actions starten gleichzeitig. Reihenfolge nicht garantiert.
Use-Case: wenn Sub-Actions unabhängig sind und Speed wichtig ist:
[Cmd] !clip
├── 1. Create Clip (3s)
├── 2. Get User Info (1s) — unabhängig von 1
├── 3. Get Stream Info (1s) — unabhängig von 1
└── 4. (Send Message basiert auf allen drei)
Sequentiell: 3+1+1 = 5s. Concurrent: max(3,1,1) = 3s.
Vorsicht: wenn Sub-Action 4 die Outputs von 1+2+3 braucht, KANN nicht concurrent sein. Concurrent ist für unabhängige Parallel-Calls.
Always Run¶
Bei Queue-Pause normalerweise wird die Queue verlassen. Mit Always Run = ✅ ignoriert die Action den Pause-Status.
Use-Case: Notfall-Commands wie !ban müssen IMMER laufen, auch wenn alle anderen Actions gerade pausiert.
Queue pausieren¶
Sub-Action: Core → Action Queues → Set Action Queue Pause State
| Feld | Wert |
|---|---|
| Queue | (welche) |
| State | Paused / Resumed / Toggle |
Use-Case: bei Stream-Pause alle Effekt-Actions pausieren:
Effekte laufen nicht mehr bis du [Cmd] !resume-effects ausführst.
Empfehlung: Queue-Layout¶
Pragmatisches Queue-Schema für AzaCraft-Stream:
| Queue | Typ | Was rein |
|---|---|---|
Default |
Non-Blocking | Chat-Commands, einfache Antworten |
Alerts |
Blocking | Sub/Bits/Raid/Gift-Alerts mit Sound/OBS |
OBS Effects |
Blocking | Source-Visibility-Show-Delay-Hide-Sequenzen |
HR Updates |
Blocking + Single-Concurrent | Heart-Rate-Pulse Actions |
TTS |
Blocking | Speaker.bot-Sub-Actions (verhindert Audio-Overlap) |
Häufige Fallen¶
- Default-Queue für alles — Alert-Sequenzen überlappen, Visuals brechen. Lösung: separate Blocking-Queue für Alerts
- Concurrent ungewollt — Sub-Actions die voneinander abhängen brechen. Default lassen (sequentiell)
- Queue voll — wenn Trigger schneller feuert als Action durchläuft (z.B. HR-Updates), Backlog wächst ewig. Queue mit kurzem Timeout oder Drop-Old einstellen
- Always Run zu großzügig — bei pausierter Queue laufen Actions die du STOP wolltest. Selektiv setzen
Pro-Tipp: Sub-Action Group als Mini-Concurrent¶
Statt ganze Action concurrent zu machen — eine Group innerhalb der Action. Group als Concurrent → nur die Sub-Actions in der Group parallel, Rest bleibt sequentiell.
[Action]
├── 1. (sequentiell)
├── 2. (sequentiell)
├── Group [Concurrent]: ← diese laufen parallel
│ ├── Send Message
│ ├── Discord Webhook
│ └── Play Sound
└── 3. (sequentiell, wartet auf alle Group-Subs)
Quellen¶
- Actions Configuration Guide: https://docs.streamer.bot/guide/core/actions
- Set Action Queue Pause State: https://docs.streamer.bot/api/sub-actions/core/action-queues/set-action-queue-pause-state
- Set Action Queue Blocking State: https://docs.streamer.bot/api/sub-actions/core/action-queues/set-action-queue-blocking-state