java osgi apache-camel interceptor osgi-bundle

java - Camel in OSGi Container: aplique InterceptStrategy a todos los contextos de camel



apache-camel interceptor (3)

No creo que esto sea posible utilizando InterceptorStrategy ya que espera que se ejecute en el mismo contexto de camello. La única forma en que estoy al tanto de trabajar en múltiples contextos es mediante el punto final de VM (que obviamente está limitado a la misma JVM), sin embargo, en este caso, probablemente sería mejor utilizar JMS, JMX o algo similar.

JMS

Cree una InterceptorStrategy para cada contexto de camello en A, B & C que publique sus mensajes a M

intercept().bean(transformForMonitoring).to("jms:queue:monitoring"); from("whatever:endpoint") .process(myProcessor) .to("target:endpoint");

También puede usar el componente vm en la intercept() si no desea la sobrecarga de JMS, sin embargo, esto limita su componente de monitoreo a una única JVM.

JMX

Esto es un poco más complicado, pero la idea básica es decirle al contexto camello que publique MBeans para A, B & C

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <jmxAgent id="agent" mbeanObjectDomainName="your.domain.name"/> ... </camelContext>

y luego haga que M conecte al JVM MBean Server y utilice algo como NotificationListener para reaccionar ante los intercambios.

Tengo varios paquetes (A, B y C) implementados en un contenedor OSGi, cada uno con un CamelContext y algunas rutas. Tengo otro paquete (M) con un CamelContext con una ruta (para recopilar datos de monitoreo) y un bean InterceptStrategy . Me gustaría que el bean InterceptStrategy de M se aplique automáticamente a todos los otros CamelContext s en el contenedor (es decir, los de A, B y C), sin tener que modificar los otros paquetes.

En última instancia, el objetivo es CamelContext datos de cada CamelContext a la ruta en M, sin tener que realizar ningún cambio en A, B o C para enrutar explícitamente el Exchange . ¿Es este enfoque o un enfoque similar factible?

Todos los CamelContext s están configurados utilizando Spring XML.

Actualización: Contexto Adicional

Los paquetes A, B y C contienen el producto principal responsable del procesamiento de datos. El paquete M contiene una herramienta de monitoreo opcional, diseñada para medir ciertos parámetros de los datos que fluyen a través de A, B y C. Actualmente, agregar la herramienta opcional requiere cambiar las rutas en A, B y C para agregar Processor adicionales para enriquecer Exchange con los datos de monitoreo y lea los datos de monitoreo antes de los puntos finales <to /> .

El objetivo es poder colocar el paquete M en un sistema ya verificado como en funcionamiento con A, B y C; y hacer que se aplique automáticamente a las rutas existentes sin tener que modificar la configuración de los paquetes existentes y de trabajo. Es aceptable realizar modificaciones en A, B y C para admitir esto, siempre que los cambios no hagan que A, B y C dependan de que M se ejecute (es decir, ABC aún debe ejecutarse sin M).

Si hay mejores medios para hacer esto que usar interceptores, estoy abierto a eso. Los objetivos principales son:

  1. Mantenga A, B y C desconectados de M (especialmente durante el desarrollo)
  2. Asegurar que la integración de M con A, B y C sea lo más fácil posible
  3. Permitir que M se integre sin tener que cambiar manualmente A, B o C

Una de las posibilidades es definir un Tracer personalizado en el Paquete ''M'' y exportarlo como servicio osgi.

En el paquete A, B, C definen la referencia osgi al bean Tracer exportado

Utilice camel JMX para habilitar el seguimiento.

Esto dará como resultado cambios en el paquete A, B, C, pero será mínimo y también dará capacidad para integrar y configurar el rastreo (interceptación)

No lo he intentado yo mismo, pero hth


Use Spring-DM o, mejor aún, transforme todas sus rutas basadas en xml de Spring para crear planos. Esta es la mejor manera compatible de usar rutas basadas en XML en Karaf / Osgi.