javascript / expert
Snippet
Orchestrierung eines kontrollierten Dienst-Shutdowns
Produktive Node.js-Dienste müssen Signale wie SIGTERM verarbeiten, um Datenbankverbindungen zu schließen und offene Anfragen zu beenden. Dieses Pattern zentralisiert die Cleanup-Logik und stellt sicher, dass alle asynchronen Teardown-Tasks abgeschlossen sind.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const cleanupHooks = [];const registerCleanup = (fn) => cleanupHooks.push(fn);const shutdown = async (signal) => {console.log(`Received ${signal}. Closing resources...`);const results = await Promise.allSettled(cleanupHooks.map(fn => fn()));results.forEach((res, i) => {if (res.status === 'rejected') console.error(`Hook ${i} failed:`, res.reason);});process.exit(0);};process.on('SIGTERM', () => shutdown('SIGTERM'));process.on('SIGINT', () => shutdown('SIGINT'));registerCleanup(async () => db.close());
nodejs
Erklärung
1
await Promise.allSettled(cleanupHooks.map(fn => fn()));
Führt alle Cleanup-Funktionen parallel aus und wartet auf deren Abschluss, selbst wenn einige fehlschlagen.
2
process.on('SIGTERM', ...)
Registriert Listener für OS-Signale, die typischerweise von Orchestratoren wie Kubernetes gesendet werden.