Ho diversi pacchetti (A, B e C) distribuiti in un contenitore OSGi, ciascuno contenente uno CamelContext
e alcuni percorsi. Ho un altro pacchetto (M) con un CamelContext
con un percorso (per la raccolta dei dati di monitoraggio) e un bean InterceptStrategy
. Vorrei che il bean InterceptStrategy
di M si applicasse automaticamente a tutti gli altri CamelContext
s nel contenitore (ad esempio quelli in A, B e C), senza dover modificare gli altri pacchetti.Cammello nel contenitore OSGi: applica InterceptStrategy a tutti i contesti cammello
In definitiva, l'obiettivo è intercettare i dati da ogni CamelContext
nel percorso in M, senza dover apportare modifiche a A, B o C per instradare esplicitamente lo Exchange
. Questo approccio o un approccio simile è fattibile?
Tutti i CamelContext
s sono configurati utilizzando Spring XML.
Aggiornamento: contesto aggiuntivo
Bundles A, B, e C contengono il prodotto principale responsabile del trattamento dei dati. Bundle M contiene uno strumento di monitoraggio opzionale, progettato per misurare determinati parametri dei dati che fluiscono attraverso A, B e C. Attualmente, l'aggiunta dello strumento opzionale richiede la modifica dei percorsi in A, B e C per aggiungere ulteriori Processor
s per arricchire Exchange
con i dati di monitoraggio e leggere i dati di monitoraggio prima degli endpoint <to />
.
L'obiettivo è essere in grado di inserire il pacchetto M in un sistema già verificato-come-lavoro con A, B e C; e farlo applicare automaticamente alle rotte esistenti senza dover modificare la configurazione per i bundle esistenti e funzionanti. È è accettabile per apportare modifiche a A, B e C per supportare questo, a condizione che le modifiche non causino A, B e C per fare affidamento su M per l'esecuzione (vale a dire, ABC deve ancora funzionare senza M).
Se c'è un mezzo migliore per farlo rispetto all'utilizzo di intercettori, sono aperto a questo. Gli obiettivi principali sono:
- Tenere A, B, e C disaccoppiato da M (soprattutto durante lo sviluppo)
- Garantire integrare M con A, B, e C è il più semplice possibile
- Consentire M essere integrato senza dover modificare manualmente A, B o C
mi piacciono le idee che hai presentato qui, ma c'è un problema che non è chiaro dalla mia descrizione: alcuni dei passaggi del codice di monitoraggio necessitano per essere eseguito in modo sincrono nelle rotte in 'A',' B' e 'C' (dato che, ad esempio, impostano le proprietà su' Exchange'), quindi semplicemente dirigere i messaggi su una coda asincrona è insufficiente. Vedo che in Camel 2.16.0 la componente direct-vm sarà in grado di gestire una condizione di assenza di consumatori, che risolverebbe il problema. Conoscete qualche meccanismo analogo disponibile in Camel 2.12.0 che consentirebbe il routing sincrono ma facoltativo? – VeeArr
No, non è uno che funziona attraverso i contesti in cammello, a meno che non si desidera utilizzare qualcosa di simile a una chiamata di servizio web nel intercettore e solo ingoiare qualsiasi eccezione se non c'è chi ascolta .. – stringy05