Zum Inhalt springen
Deutsch

Eigenständige Snippets

Wenn du ein Konzept isoliert sehen willst, sind die eigenständigen Snippets der richtige Ort. Jedes ist eine einzelne Datei, die ein Pattern demonstriert - kein Docker, keine Peers, lauffähig mit bun.

Zu finden in examples/ im Repo - die grundlegenden liegen auf oberster Ebene, der Rest in themenbezogenen Unterverzeichnissen (patterns/, persistence/, cluster/, fsm/, pubsub/, crdt/, typed/, management/, …).

DateiKonzept
hello-world.tsDer minimale Actor - extends Actor, behandelt eine Nachricht.
ping-pong.tsZwei Actors, die eine Nachricht hin- und herspielen.
bank-account.tsRequest/Response via ask-Pattern.
supervision.tsEigene Strategie mit decideBy.
become.tscontext.become(...) für State-Übergänge.
death-watch.tsTerminated-Benachrichtigungen via Death Watch.
router.tsLokaler Pool-Router, Round-Robin über Worker.
scheduler.tsscheduleOnce / scheduleAtFixedRate.
patterns/timers-heartbeat.tsActor-eigene context.timers.
patterns/stash-init.tsStash + Replay während async Initialisierung.
patterns/circuit-breaker-hello.tsCircuitBreaker um einen fehleranfälligen Call.
patterns/backoff-supervisor.tsExponentielles Backoff-Restart.
typed/behaviors-receive.tsDerselbe Counter via typisierte Behaviors-DSL.
typed/behaviors-supervise.tssetup / withTimers / supervise kombiniert.
fsm/traffic-light.tsFSM-DSL - when / onEnter / onTransition.
fsm/order-workflow.tsMehrstufige PersistentFSM (Saga).
persistence/bank-account.tsEvent-Sourced Actor - persist, recover, Snapshot.
persistence/durable-state-kv.tsDurable-State-Persistenz (Snapshot-Stil).
persistence/projection-bank-statement.tsRead-Side-View via ProjectionActor.
persistence/replicated-counter.tsMulti-Master-repliziertes Event-Sourcing.
cluster/singleton-hello.tsCluster-Singleton mit Manager + Proxy.
cluster/sharded-daemon-hello.tsSharded Daemon Process - N Worker nach Index.
pubsub/chat-mediator.tsDistributedPubSub auf einem einzelnen Node.
pubsub/event-bus-across-nodes.tsThemenbasierter Event-Bus über Nodes.
crdt/shopping-cart-orset.tsOR-Set-CRDT - Add-Wins bei nebenläufigen Änderungen.
management/health-endpoint.ts/health + /cluster/members-Endpoints.
management/prometheus-endpoint.ts/metrics Prometheus-Exposition.

Jedes Snippet ist 50-200 Zeilen. Liest sich in ein paar Minuten; verändere es, um mit dem Konzept zu spielen.

Terminal-Fenster
git clone https://github.com/pathosDev/actor-ts.git
cd actor-ts
bun install
bun examples/hello-world.ts

Jedes Snippet läuft bis zum Ende und beendet sich. Keine langlaufenden Prozesse; keine externen Abhängigkeiten.

Für cluster-bezogene Snippets (Singleton, Sharding, PubSub, DD) nutzen die Snippets MultiNodeSpec, um einen Cluster innerhalb eines Prozesses zu simulieren - kein Docker nötig.

Die meisten Snippets folgen demselben Aufbau:

import { ActorSystem, ... } from 'actor-ts';
// 1. System + Actors aufsetzen.
const system = ActorSystem.create('demo');
const ref = system.spawnAnonymous(MyActor);
// 2. Ein paar Nachrichten senden.
ref.tell({ ... });
ref.tell({ ... });
// 3. Auf Verarbeitung warten (kleines await oder expect auf einer Probe).
await new Promise(r => setTimeout(r, 100));
// 4. Ergebnis ausgeben + aufräumen.
console.log(...);
await system.terminate();

Für komplexere Flows (Cluster, Persistenz) nutzen die Snippets TestKit + TestProbe für sauberes Teardown.

Snippets sind der einfachste Ort zum Experimentieren:

Terminal-Fenster
# Kopieren, editieren, ausführen:
cp examples/hello-world.ts examples/my-experiment.ts
# examples/my-experiment.ts editieren
bun examples/my-experiment.ts

Das Framework wird über das actor-ts-Package des lokalen Repos eingebunden - deine Edits laufen gegen die Live-Quelle.

Wenn du ein cleveres Pattern erarbeitet hast, stelle einen PR mit einem Snippet. Kriterien:

  • Eine Datei, ≤ 200 Zeilen.
  • Ein Konzept klar demonstriert.
  • Self-contained - lauffähig ohne externe Services.
  • Kommentare, die erklären, was der Code zeigt.

Lege sie für ein grundlegendes Konzept auf oberster Ebene von examples/ ab, sonst im passenden themenbezogenen Unterverzeichnis; füge dann eine Zeile zur obigen Tabelle hinzu.