Ich arbeite an einem Proof of Concept für einen kleinen Prozess-Engine basierend auf Camel. Die Anforderungen sind, die Fähigkeit zu haben, eine Reihe von konsekutiven Schritten auszuführen und jeder von ihnen könnte potenziell Stunden dauern. Ein asynchroner Kommunikationsstil ist in diesem Fall die offensichtliche Wahl, aber ich habe Schwierigkeiten, den "Prozess"-Teil richtig zu gestalten.
Beim Senden einer Nachricht an ein externes System muss ich auf die Fertigstellung warten. Da dies viel Zeit in Anspruch nehmen könnte, überlege ich, die Verarbeitung des konkreten Schrittes anzuhalten, nachdem ich die Nachricht gesendet habe, und dann einen neuen "Job" zu starten, sobald ich die Abschlussnachricht zurückbekomme. So wird die Verarbeitung jedes Schrittes buchstäblich als Camel-Route behandelt, die an derselben JMS-Warteschlange beginnt, und dann entscheidet ein inhaltsgesteuerter Router, welche konkrete Logik basierend auf den Headern der Nachricht oder deren Inhalt ausgeführt werden soll.
Das Problem besteht jedoch darin, wie man das Risiko von Nachrichtenverlust vermeiden kann. Zum Beispiel sende ich an einem konkreten Schritt eine Nachricht und stoppe die Verarbeitung. Das externe System hat aus irgendeinem Grund die Nachricht nicht verarbeitet, sodass mein System keine Benachrichtigung erhält. Das bedeutet, dass der Prozess stecken bleibt, es sei denn, ein anderes Komponent erzeugt eine Nachricht, um ihn zu reaktiveren.
Da das System jederzeit heruntergefahren werden könnte, muss ich Logik einbauen, um die Verarbeitung von Nachrichten nach einem Neustart fortzusetzen (was eine Art von Nachrichtendurchsatz, Wiederholung und Transaktionsverwaltungsstrategie impliziert).
All diese Probleme häufen sich, daher möchte ich die erfahrenen Camel-Champions bitten, Vorschläge zu machen, wie man eine solche Art von Logik mit Camel entwerfen kann. Ich weiß, dass ein dediziertes BPM-Produkt oder ein ESB dieses Problem viel einfacher lösen könnte, aber ich möchte die Lösung nicht aufblähen.
Alle Ratschläge sind willkommen, insbesondere in Bezug auf die Möglichkeiten von Camel, die zur Vereinfachung der Lösung beitragen könnten.