Wiki-Quellcode von NATS Setup
Version 1.1 von Daniel Herrmann am 2025/09/08 08:42
Verstecke letzte Bearbeiter
| author | version | line-number | content |
|---|---|---|---|
| |
1.1 | 1 | NATS ist eine zentrale Komponente der Architektur. NATS ist ein verteiltes Messaging-System, welches häufig für Microservices verwendet wird. |
| 2 | |||
| 3 | Unser Backend (oder auch andere Systeme) publizieren Events in NATS, die dann beispielsweise in N8n über ein Trigger konsumiert werden. | ||
| 4 | |||
| 5 | = {{id name="NATSSetup-GrundlegenderAufbau"/}}Grundlegender Aufbau = | ||
| 6 | |||
| 7 | NATS kann grob in zwei Varianten unterteilt werden, **NATS Core** und **NATS JetStream**. | ||
| 8 | |||
| 9 | (% style="" data-start="0" data-end="347" %) | ||
| 10 | NATS Core ist das Grundsystem von NATS und bietet schnelle, leichtgewichtige Kommunikationsmöglichkeiten wie Publish/Subscribe, Request/Reply und Queueing. Dabei werden Nachrichten in der Regel nur flüchtig übertragen: Geht ein Empfänger offline, gehen die Nachrichten verloren. Der Fokus liegt auf extrem niedriger Latenz und hoher Performance. | ||
| 11 | |||
| 12 | (% style="" data-start="349" data-end="822" data-is-last-node="" data-is-only-node="" %) | ||
| 13 | NATS JetStream erweitert NATS Core um Funktionen wie (% data-start="402" data-end="483" %)**Persistenz, wiederholtes Lesen von Nachrichten und zeitversetzte Verarbeitung**(%%). Nachrichten können gespeichert werden, was eine zuverlässige Zustellung, Wiederholungen und komplexe Workflows ermöglicht. JetStream ist damit besonders geeignet für Szenarien, in denen eine dauerhafte Verarbeitung oder Event-Sourcing erforderlich ist, während Core eher für schnelle, vorübergehende Nachrichtenübertragung optimiert ist. | ||
| 14 | |||
| 15 | == {{id name="NATSSetup-JetStreamkonfiguration"/}}JetStream konfiguration == | ||
| 16 | |||
| 17 | In unserem Fall ist Persistenz auch bei einem zeitweisen Ausfall der Internetverbindung im Makerspace notwendig, sodass wir JetStream mit Message Retention verwenden. Dabei müssen die wichtigen Komponenten vorab angelegt werden. | ||
| 18 | |||
| 19 | === {{id name="NATSSetup-NATSCLIkonfigurieren"/}}NATS CLI konfigurieren === | ||
| 20 | |||
| 21 | * Unterschied zwischen admin und jsadmin | ||
| 22 | * beschreiben wie man context switch macht | ||
| 23 | * wie man einen neuen context anlegt | ||
| 24 | |||
| 25 | {{code language="shell"}} | ||
| 26 | nats context add mksp-sysadmin --server ds-hetzner.mksp-da.de:4222 --description "MKSP NATS SYS Admin" --tlscert /path/to/admin.mksp-da.de.crt --tlskey /path/to/admin.mksp-da.de.key --tlsca /path/to/mksp_root_x1_ca.crt | ||
| 27 | |||
| 28 | nats context add mksp-jsadmin --server ds-hetzner.mksp-da.de:4222 --description "MKSP NATS JetStream" --tlscert /path/to/jsadmin.mksp-da.de.crt --tlskey /path/to/jsadmin.mksp-da.de.key --tlsca /path/to/mksp_root_x1_ca.crt | ||
| 29 | |||
| 30 | nats context select mksp-jsadmin | ||
| 31 | {{/code}} | ||
| 32 | |||
| 33 | === {{id name="NATSSetup-JetStreaminitialisieren"/}}JetStream initialisieren === | ||
| 34 | |||
| 35 | JetStream ist in so genannte **Streams** unterteilt, welche bestimmte **Subjects** in einem Stream zusammenfassen. Wir nutzen für alle Events einen gemeinsamen Präfix (mksp), sodass wir den Stream hierfür erstellen. Die NATS Dokumentation selbst beschreibt die Konzepte sehr gut: | ||
| 36 | |||
| 37 | * JetStream im Allgemeinen: [[https:~~/~~/docs.nats.io/nats-concepts/jetstream>>url:https://docs.nats.io/nats-concepts/jetstream||shape="rect"]] | ||
| 38 | * JetStream Streams: [[https:~~/~~/docs.nats.io/nats-concepts/jetstream/streams>>url:https://docs.nats.io/nats-concepts/jetstream/streams||shape="rect"]] | ||
| 39 | |||
| 40 | Wir legen nun also ein Stream namens **backend_events** an: | ||
| 41 | |||
| 42 | {{code language="shell"}} | ||
| 43 | nats stream add backend_events --subjects "mksp.>" --retention work --max-age 7d --storage file --defaults | ||
| 44 | {{/code}} | ||
| 45 | |||
| 46 | === {{id name="NATSSetup-JetStreamConsumer"/}}JetStream Consumer === | ||
| 47 | |||
| 48 | Consumer sind eine Auswahl / Ansicht von Teilen eines Streams. Details finden sich wieder in der NATS Dokumentation: [[https:~~/~~/docs.nats.io/nats-concepts/jetstream/consumers>>url:https://docs.nats.io/nats-concepts/jetstream/consumers||shape="rect"]] | ||
| 49 | |||
| 50 | Consumer können entweder persistent sein (dauerhaft, ein Client kann dann den bestehenden Consumer neben) oder flüchtig (ephemeral), in diesem Fall wird der Consumer beim Erstellen des Clients (beispielsweise durch N8n) angelegt. In der Regel werden Consumer durch einen Filter auf bestimmte Subjects beschränkt, diese dürfen sich nicht überschneiden. |