Wiki-Quellcode von NATS Setup

Version 2.1 von Daniel Herrmann am 2025/09/08 08:44

Zeige letzte Bearbeiter
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 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.
10
11 NATS JetStream erweitert NATS Core um Funktionen wie **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.
12
13 == {{id name="NATSSetup-JetStreamkonfiguration"/}}JetStream konfiguration ==
14
15 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.
16
17 === {{id name="NATSSetup-NATSCLIkonfigurieren"/}}NATS CLI konfigurieren ===
18
19 * Unterschied zwischen admin und jsadmin
20 * beschreiben wie man context switch macht
21 * wie man einen neuen context anlegt
22
23 {{code language="shell"}}
24 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
25
26 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
27
28 nats context select mksp-jsadmin
29 {{/code}}
30
31 === {{id name="NATSSetup-JetStreaminitialisieren"/}}JetStream initialisieren ===
32
33 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:
34
35 * JetStream im Allgemeinen: [[https:~~/~~/docs.nats.io/nats-concepts/jetstream>>url:https://docs.nats.io/nats-concepts/jetstream||shape="rect"]]
36 * JetStream Streams: [[https:~~/~~/docs.nats.io/nats-concepts/jetstream/streams>>url:https://docs.nats.io/nats-concepts/jetstream/streams||shape="rect"]]
37
38 Wir legen nun also ein Stream namens **backend_events** an:
39
40 {{code language="shell"}}
41 nats stream add backend_events --subjects "mksp.>" --retention work --max-age 7d --storage file --defaults
42 {{/code}}
43
44 === {{id name="NATSSetup-JetStreamConsumer"/}}JetStream Consumer ===
45
46 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"]]
47
48 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.
49
50 = {{id name="NATSSetup-Troubleshooting"/}}Troubleshooting =
51
52 JetStream
53
54 {{code language="shell"}}
55 $ nats context select mksp-jsadmin
56 $ nats stream ls
57 ╭─────────────────────────────────────────────────────────────────────────────────────╮
58 │ Streams │
59 ├────────────────┬─────────────┬─────────────────────┬──────────┬──────┬──────────────┤
60 │ Name │ Description │ Created │ Messages │ Size │ Last Message │
61 ├────────────────┼─────────────┼─────────────────────┼──────────┼──────┼──────────────┤
62 │ backend_events │ │ 2025-09-08 08:36:19 │ 0 │ 0 B │ never │
63 {{/code}}
64
65 Sys
66
67 {{code language="shell"}}
68 $ nats context select mksp-sysadmin
69 $ nats server report connections
70
71 ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
72 │ Top 5 Connections out of 5 by subs │
73 ├─────┬──────────────────────────┬──────────────┬─────────┬───────────────────┬─────────┬────────┬─────────┬──────────┬──────────┬───────────┬──────┤
74 │ CID │ Name │ Server │ Cluster │ IP │ Account │ Uptime │ In Msgs │ Out Msgs │ In Bytes │ Out Bytes │ Subs │
75 ├─────┼──────────────────────────┼──────────────┼─────────┼───────────────────┼─────────┼────────┼─────────┼──────────┼──────────┼───────────┼──────┤
76 │ 10 │ │ mksp-nats-01 │ │ 172.18.0.37:47950 │ MKSP │ 18m7s │ 0 │ 0 │ 0 B │ 0 B │ 0 │
77 │ 12 │ │ mksp-nats-01 │ │ 172.18.0.39:46446 │ MKSP │ 18m7s │ 10 │ 0 │ 4.5 KiB │ 0 B │ 0 │
78 │ 9 │ │ mksp-nats-01 │ │ 172.18.0.37:47934 │ MKSP │ 18m7s │ 0 │ 0 │ 0 B │ 0 B │ 1 │
79 │ 11 │ │ mksp-nats-01 │ │ 172.18.0.33:37156 │ MKSP │ 18m7s │ 0 │ 10 │ 0 B │ 4.5 KiB │ 1 │
80 │ 22 │ NATS CLI Version 0.2.4 │ mksp-nats-01 │ │ 10.1.253.1:60153 │ SYS │ 0s │ 2 │ 1 │ 210 B │ 933 B │ 1 │
81 ├─────┼──────────────────────────┼──────────────┼─────────┼───────────────────┼─────────┼────────┼─────────┼──────────┼──────────┼───────────┼──────┤
82 │ │ Totals for 5 connections │ │ │ │ │ │ 12 │ 11 │ 4.8 KiB │ 5.5 KiB │ 3 │
83 ╰─────┴──────────────────────────┴──────────────┴─────────┴───────────────────┴─────────┴────────┴─────────┴──────────┴──────────┴───────────┴──────╯
84
85 ╭──────────────────────────────────────╮
86 │ Connections per server │
87 ├──────────────┬─────────┬─────────────┤
88 │ Server │ Cluster │ Connections │
89 ├──────────────┼─────────┼─────────────┤
90 │ mksp-nats-01 │ │ 5 │
91 ╰──────────────┴─────────┴─────────────╯
92 {{/code}}
93
94 \\