Sto lavorando su PoC per il piccolo motore di processo basato su Camel. I requisiti devono avere la capacità di eseguire serie di passaggi delle conseguenze e ognuno di essi potrebbe richiedere ore per essere eseguito. In questo caso, lo stile di comunicazione asincrona è una scelta ovvia, ma sono in difficoltà con la parte "processo" giusta.Approccio per gestire i processi a vita lunga con Camel
Quando si invia un messaggio a un sistema esterno, è necessario attendere il completamento. Finché potrebbe richiedere molto tempo, sto pensando di interrompere l'elaborazione del passaggio concreto dopo che ho inviato un messaggio e poi di iniziare un nuovo "lavoro" dopo aver ricevuto il messaggio di completamento. Quindi, l'elaborazione letterale di ogni passaggio verrà gestita come una rotta Camel a partire dalla stessa coda JMS e quindi il router basato sul contenuto deciderà quale logica concreta dovrebbe essere eseguita in base alle intestazioni del messaggio o al suo contenuto.
Il problema, tuttavia, è come evitare potenziali perdite di messaggi. Ad esempio, nella fase concreta invierò un messaggio e interromperò l'elaborazione. Il sistema esterno per qualche motivo non ha elaborato il messaggio, pertanto il mio sistema non riceve alcuna notifica. Ciò significa che il processo è bloccato a meno che qualche altro componente generi un messaggio per riattivarlo.
Purché il sistema possa essere arrestato in qualsiasi momento, devo sviluppare la logica per continuare a elaborare i messaggi dopo il riavvio (che implica una sorta di persistenza dei messaggi, di riconsegna e strategia di gestione delle transazioni).
Tutti questi numeri si sommano quindi mi piacerebbe chiedere ai campioni Camel esperienza di fornire suggerimenti su come progettare questo tipo di logica usando Camel. So che il prodotto BPM dedicato o ESB potrebbe gestire questo problema molto più facilmente ma non voglio ingigantire la soluzione.
Qualsiasi consiglio è ben accetto, soprattutto in termini di funzionalità Camel che potrebbero aiutare nella semplificazione della soluzione.