0 Tage Serie
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.