Stiamo costruendo un progetto di integrazione utilizzando Apache Camel (Camel 2.10.3, basato su Java DSL).Come rilevare la connessione JMS rotta/ripristinata in Apache Camel?
Abbiamo un percorso che estrae i dati da un database (chiamiamolo IN_DB), esegue alcune operazioni logiche e inserisce in un altro database (OUT_DB) una volta al giorno e un'altra route che si abbona a un argomento JMS per dati XML, qualche logica e la inserisce nello stesso database (OUT_DB) per tutto il giorno.
Il requisito è che quando la connessione dell'argomento JMS si interrompe per qualsiasi motivo, continuiamo a provare a riconnettersi indefinitamente e, una volta completata la riconnessione, è necessario tornare al database (IN_DB) e fare un altro carico per compilare il divario in cui l'argomento era giù.
La mia domanda è come possiamo fare questa logica ('Ero connesso, quindi sono disconnesso e ora sono di nuovo connesso') in Camel? Cosa succede al percorso che inizia con un argomento di consumo quando l'argomento si interrompe, la rotta si fermerà? O emetterà un messaggio di errore in qualche coda di errore? Devo scrivere il mio gestore per monitorare la connessione dell'argomento, o Camel si ricollegherà automaticamente quando l'argomento ritorna e imposta l'intestazione del messaggio, o imposta alcune variabili di contesto per indicare che "Ero connesso, quindi mi sono disconnesso e ora Sono connesso di nuovo 'è successo lo scenario? Sono felice di costruire la logica del percorso attorno al richiamo del carico del database. Non riesco a capire il modo migliore per 'rilevare' in Camel che questo scenario sia successo.
Eventuali suggerimenti molto apprezzati.
Grazie Matt, alcuni suggerimenti eccellenti qui. Sfortunatamente, non possediamo gli argomenti a cui ci stiamo iscrivendo (broker EMS Tibco) e ci stiamo connettendo con account di sola lettura che rendono l'heartbeat un approccio un po 'complicato. Da dove verrà lanciata l'eccezione JMS? Lo stesso JMSComponent o il percorso che ne consuma? – Matt
Sembra essere un po 'bloccato per le opzioni! Non ho un esempio da dare, ma il listener delle eccezioni è registrato sulla connessione, quindi l'eccezione dovrebbe essere generata dalla connessione piuttosto che da qualche parte nel percorso. La tua unica altra opzione è di interrogare regolarmente IN_DB per vedere se ha dei messaggi che non conosci, ma sospetto che non sia neanche pratico. –