Änderungen von Dokument NATS - Technisches Setup

Zuletzt geändert von Daniel Herrmann am 2025/12/14 16:20

Von Version Icon 5.1 Icon
bearbeitet von Daniel Herrmann
am 2025/09/08 22:10
Änderungskommentar: Es gibt keinen Kommentar für diese Version
Auf Version Icon 8.1 Icon
bearbeitet von Daniel Herrmann
am 2025/09/09 22:59
Änderungskommentar: Es gibt keinen Kommentar für diese Version

Zusammenfassung

Details

Icon Seiteneigenschaften
Inhalt
... ... @@ -83,6 +83,26 @@
83 83  
84 84  Da ein User nur einem Account zugeordnet werden kann, gibt es einen admin User für administrative Tätigkeiten sowie einen JetStream Admin User für die Account-Verwaltung.
85 85  
86 +== {{id name="NATSSetup-NATSCoremitAccounts"/}}NATS Core mit Accounts ==
87 +
88 +Damit die NATS Core Messages auch weiterhin funktionieren müssen publish und subscribe Berechtigungen vergeben werden. NATS wird neben dem Eventmanagement auch noch für die Task Queue mit Taskiq eingesetzt, hier werden zur Zeit noch Core Funktionalitäten verwendet. Daher muss die Berechtigung für den backend User erweitert werden:
89 +
90 +{{code language="json"}}
91 +accounts: {
92 + MKSP: {
93 + users: [
94 + {
95 + user: "CN=backend.mksp-da.de,OU=Makerspace Darmstadt IT,O=Makerspace Darmstadt e.V.,C=DE"
96 + permissions: {
97 + publish: [">"]
98 + subscribe: [">"]
99 + }
100 + },
101 +...
102 +{{/code}}
103 +
104 +Wichtig sind hier die zusätzlichen Permissions, die den Zugriff auf Core Events regeln.
105 +
86 86  == {{id name="NATSSetup-JetStreamKonfiguration"/}}JetStream Konfiguration ==
87 87  
88 88  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.
... ... @@ -120,8 +120,109 @@
120 120  
121 121  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"]]
122 122  
123 -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.
143 +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. Da die NATS JavaScript Client Library (die von n8n verwendet wird) es leider nicht sinnvoll erlaubt, ephemeral Consumer anzulegen verwenden wir dauerhafte Consumer-Namen.
124 124  
145 +|=(% scope="col" %)(((
146 +Backend Event
147 +)))|=(% scope="col" %)(((
148 +Consumer Name
149 +)))|=(% scope="col" %)(((
150 +Schema
151 +)))
152 +|(((
153 +{{code language="none"}}
154 +mksp.backend.briefing.offer.cancelled
155 +{{/code}}
156 +)))|(((
157 +backend_briefing_offer_cancelled
158 +)))|(((
159 +##(% class="nc" %)BriefingOfferEvent(%%)##
160 +)))
161 +|(((
162 +{{code language="none"}}
163 +mksp.backend.briefing.offer.created
164 +{{/code}}
165 +)))|(((
166 +backend_briefing_offer_created
167 +)))|(((
168 +##(% class="nc" %)BriefingOfferEvent(%%)##
169 +)))
170 +|(((
171 +##(% class="s" %)mksp.backend.briefing.offer.updated(%%)##
172 +)))|(((
173 +backend_briefing_offer_updated
174 +)))|(((
175 +##(% class="nc" %)BriefingOfferEvent(%%)##
176 +)))
177 +|(((
178 +{{code language="none"}}
179 +mksp.backend.briefing.created
180 +{{/code}}
181 +)))|(((
182 +backend_briefing_created
183 +)))|(((
184 +##(% class="n" %)BriefingEvent(%%)##
185 +)))
186 +|(((
187 +##(% class="s" %)mksp.backend.key.assigned(%%)##
188 +)))|(((
189 +backend_key_assigned
190 +)))|(((
191 +##(% class="nc" %)KeyEvent(%%)##
192 +)))
193 +|(((
194 +##(% class="s" %)mksp.backend.key.unassigned(%%)##
195 +)))|(((
196 +backend_key_unassigned
197 +)))|(((
198 +##(% class="nc" %)KeyEvent(%%)##
199 +)))
200 +|(((
201 +##(% class="s" %)mksp.backend.storage.reserved(%%)##
202 +)))|(((
203 +backend_storage_reserved
204 +)))|(((
205 +##(% class="nc" %)StorageSpaceEvent(%%)##
206 +)))
207 +|(((
208 +(% class="s" %){{code language="none"}}mksp.backend.storage.released{{/code}}
209 +)))|(((
210 +backend_storage_released
211 +)))|(((
212 +##(% class="nc" %)StorageSpaceEvent(%%)##
213 +)))
214 +|(((
215 +(% class="s" %){{code language="none"}}mksp.backend.storage.expired{{/code}}
216 +)))|(((
217 +backend_storage_expired
218 +)))|(((
219 +(% class="nc" %){{code language="none"}}StorageSpaceEvent{{/code}}
220 +)))
221 +|(((
222 +(% class="s" %){{code language="none"}}mksp.backend.user.converted_to_member{{/code}}
223 +)))|(((
224 +backend_user_converted_to_member
225 +)))|(((
226 +(% class="nc" %){{code language="none"}}UserEvent{{/code}}
227 +)))
228 +|(((
229 +(% class="s" %){{code language="none"}}mksp.backend.user.converted_to_guest{{/code}}
230 +)))|(((
231 +backend_user_converted_to_guest
232 +)))|(((
233 +(% class="nc" %){{code language="none"}}UserEvent{{/code}}
234 +)))
235 +
236 +Die Consumer können dann wie folgt angelegt werden:
237 +
238 +{{code language="json"}}
239 +$ nats consumer add backend_events <name> --pull --filter="<filter>" --defaults
240 +
241 +# Beispiel
242 +nats consumer add backend_events backend_briefing_offer_cancelled --pull --filter="mksp.backend.briefing.offer.cancelled" --defaults
243 +nats consumer add backend_events backend_key_assigned --pull --filter="mksp.backend.key.assigned" --defaults
244 +{{/code}}
245 +
125 125  = {{id name="NATSSetup-Troubleshooting"/}}Troubleshooting =
126 126  
127 127  Man kann über die NATS CLI mit dem Server interagieren.
... ... @@ -128,6 +128,8 @@
128 128  
129 129  == {{id name="NATSSetup-JetStream"/}}JetStream ==
130 130  
252 +=== {{id name="NATSSetup-Streams"/}}Streams ===
253 +
131 131  Man kann sich die vorhandenen Streams und die Anzahl der Nachrichten anschauen. Die Anzahl sollte üblicherweise 0 sein, wenn die Zahl höher ist, werden Events nicht richtig abgearbeitet.
132 132  
133 133  {{code language="shell"}}
... ... @@ -152,6 +152,58 @@
152 152  {"timestamp":"2025-09-08T09:06:00.062358","stora
153 153  {{/code}}
154 154  
278 +=== {{id name="NATSSetup-Consumer"/}}Consumer ===
279 +
280 +Die bestehenden Consumer kann man sich ebenfalls im Jetstream Context anzeigen lassen:
281 +
282 +{{code language="json"}}
283 +$ nats consumer ls backend_events
284 +╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
285 +│ Consumers │
286 +├──────────────────────────────────┬─────────────┬─────────────────────┬─────────────┬─────────────┬───────────────┤
287 +│ Name │ Description │ Created │ Ack Pending │ Unprocessed │ Last Delivery │
288 +├──────────────────────────────────┼─────────────┼─────────────────────┼─────────────┼─────────────┼───────────────┤
289 +│ backend_briefing_offer_cancelled │ │ 2025-09-09 22:53:26 │ 0 │ 0 │ never │
290 +│ backend_key_assigned │ │ 2025-09-09 22:54:01 │ 0 │ 0 │ never │
291 +╰──────────────────────────────────┴─────────────┴─────────────────────┴─────────────┴─────────────┴───────────────╯
292 +{{/code}}
293 +
294 +In dieser Tabelle sieht man bereits die "unprocessed" Nachrichten, sieht also gut, wenn n8n die Nachrichten nicht korrekt verarbeitet. Man kann sich ebenfalls die Details eines Consumers anzeigen lassen:
295 +
296 +{{code language="json"}}
297 +$ nats consumer info backend_events backend_briefing_offer_cancelled
298 +
299 +Information for Consumer backend_events > backend_briefing_offer_cancelled created 2025-09-09 22:53:26
300 +
301 +Configuration:
302 +
303 + Name: backend_briefing_offer_cancelled
304 + Pull Mode: true
305 + Filter Subject: mksp.backend.briefing.offer.cancelled
306 + Deliver Policy: All
307 + Ack Policy: Explicit
308 + Ack Wait: 30.00s
309 + Replay Policy: Instant
310 + Max Ack Pending: 1,000
311 + Max Waiting Pulls: 512
312 +
313 +State:
314 +
315 + Host Version: 2.11.8
316 + Required API Level: 0 hosted at level 1
317 + Last Delivered Message: Consumer sequence: 0 Stream sequence: 10
318 + Acknowledgment Floor: Consumer sequence: 0 Stream sequence: 0
319 + Outstanding Acks: 0 out of maximum 1,000
320 + Redelivered Messages: 0
321 + Unprocessed Messages: 0
322 + Waiting Pulls: 1 of maximum 512
323 +{{/code}}
324 +
325 +Insbesondere die letzten beiden Zeilen sind wichtig:
326 +
327 +* **Unprocessed Messages** sind Nachrichten, die noch nicht abgerufen wurden. Dies sollte immer 0 sein
328 +* **Waiting Pulls**: die Anzahl der verbundenen Clients. Üblicherweise sollte das nur n8n sein, also immer 1.
329 +
155 155  == {{id name="NATSSetup-Server"/}}Server ==
156 156  
157 157  Man kann sich ebenfalls die aktiven Verbindungen anzeigen:
... ... @@ -165,7 +165,7 @@
165 165  ├─────┬──────────────────────────┬──────────────┬─────────┬───────────────────┬─────────┬──────────┬─────────┬──────────┬──────────┬───────────┬──────┤
166 166  │ CID │ Name │ Server │ Cluster │ IP │ Account │ Uptime │ In Msgs │ Out Msgs │ In Bytes │ Out Bytes │ Subs │
167 167  ├─────┼──────────────────────────┼──────────────┼─────────┼───────────────────┼─────────┼──────────┼─────────┼──────────┼──────────┼───────────┼──────┤
168 -│ 83 │ backend_kiqer │ mksp-nats-01 │ │ 172.18.0.33:52808 │ MKSP │ 2h24m18s │ 0 │ 0 │ 0 B │ 0 B │ 0 │
343 +│ 83 │ backend_kicker │ mksp-nats-01 │ │ 172.18.0.33:52808 │ MKSP │ 2h24m18s │ 0 │ 0 │ 0 B │ 0 B │ 0 │
169 169  │ 93 │ backend_scheduler │ mksp-nats-01 │ │ 172.18.0.29:47620 │ MKSP │ 2h23m23s │ 0 │ 0 │ 0 B │ 0 B │ 0 │
170 170  │ 82 │ backend_fastapi │ mksp-nats-01 │ │ 172.18.0.33:52798 │ MKSP │ 2h24m18s │ 1 │ 1 │ 345 B │ 838 B │ 1 │
171 171  │ 94 │ backend_worker │ mksp-nats-01 │ │ 172.18.0.37:53550 │ MKSP │ 2h23m23s │ 0 │ 0 │ 0 B │ 0 B │ 1 │
Icon Confluence.Code.ConfluencePageClass[0]
Id
... ... @@ -1,1 +1,1 @@
1 -207814669
1 +207814677
URL
... ... @@ -1,1 +1,1 @@
1 -https://wiki.makerspace-darmstadt.de/spaces/PROJ/pages/207814669/NATS Setup
1 +https://wiki.makerspace-darmstadt.de/spaces/PROJ/pages/207814677/NATS Setup