Prozess-Instanz beenden
Diese Seite zeigt, wie Sie laufende Prozess-Instanzen in der Engine terminieren.
Grundlegendes Beispiel
import { Client } from '@processcube/client';
const client = new Client('http://localhost:8000');
async function terminateInstance() {
const processInstanceId = 'instance-123';
console.log('Terminiere Prozess-Instanz');
await client.terminateProcessInstance(processInstanceId);
console.log('Prozess-Instanz wurde beendet');
}
terminateInstance().catch(console.error);Das Terminieren einer Prozess-Instanz kann nicht rückgängig gemacht werden! Der Prozess wird sofort gestoppt.
Verwendungszwecke
Fehlerhafte Prozesse stoppen
// Prozess-Instanzen im Error-Status finden und terminieren
const errorInstances = await client.getProcessInstances({
processKey: 'OrderProcess',
state: 'error',
});
for (const instance of errorInstances) {
console.log(`Terminiere fehlerhafte Instanz: ${instance.processInstanceId}`);
await client.terminateProcessInstance(instance.processInstanceId);
}Timeout-basierte Terminierung
// Prozesse terminieren, die zu lange laufen
const runningInstances = await client.getProcessInstances({
processKey: 'OrderProcess',
state: 'running',
});
const timeout = 24 * 60 * 60 * 1000; // 24 Stunden
for (const instance of runningInstances) {
const runningTime = Date.now() - instance.createdAt.getTime();
if (runningTime > timeout) {
console.log(`Timeout: Terminiere ${instance.processInstanceId}`);
await client.terminateProcessInstance(instance.processInstanceId);
}
}Best Practices
Vor dem Terminieren prüfen
async function safeTerminate(processInstanceId: string) {
// Prüfe, ob Instanz existiert und läuft
const instances = await client.getProcessInstances({ processInstanceId });
const instance = instances[0];
if (!instance) {
console.log('Instanz nicht gefunden');
return false;
}
if (instance.state !== 'running') {
console.log(`Instanz ist nicht aktiv (Status: ${instance.state})`);
return false;
}
// Terminieren
await client.terminateProcessInstance(processInstanceId);
console.log('Instanz terminiert');
return true;
}Fehlerbehandlung
try {
await client.terminateProcessInstance(processInstanceId);
console.log('Erfolgreich terminiert');
} catch (error) {
if (error.code === 'INSTANCE_NOT_FOUND') {
console.error('Prozess-Instanz existiert nicht');
} else if (error.code === 'ALREADY_TERMINATED') {
console.error('Prozess-Instanz wurde bereits terminiert');
} else {
console.error('Terminierung fehlgeschlagen:', error.message);
}
}Batch-Terminierung
async function terminateMultiple(processInstanceIds: string[]) {
const results = [];
for (const id of processInstanceIds) {
try {
await client.terminateProcessInstance(id);
results.push({ id, success: true });
} catch (error) {
results.push({ id, success: false, error: error.message });
}
}
console.log(`Terminiert: ${results.filter((r) => r.success).length}/${results.length}`);
return results;
}Cleanup nach Terminierung
async function terminateAndCleanup(processInstanceId: string) {
// Terminiere Instanz
await client.terminateProcessInstance(processInstanceId);
// Optional: Aufräumen (z.B. Datenbank-Einträge)
console.log('Cleanup durchgeführt');
}Nächste Schritte
- Prozess-Instanzen neu starten - Terminierte Prozesse wiederholen
- Prozess-Instanzen abfragen - Status überwachen