tutorial patterns camel java apache-camel soa enterprise-integration

java - patterns - apache esb



¿Qué es exactamente el camello apache? (20)

No entiendo qué hace exactamente Camel .

Si pudieras dar en 101 palabras una introducción a Camel:

  • ¿Qué es exactamente?
  • ¿Cómo interactúa con una aplicación escrita en Java?
  • ¿Es algo que va de la mano con el servidor?
  • ¿Es un programa independiente?

Por favor explique que es el camello.


¿Qué es exactamente?

Apache Camel es un marco de integración ligero que implementa todos los patrones de integración empresarial. Puede integrar fácilmente diferentes aplicaciones utilizando los patrones requeridos.

Puedes usar Java, Spring XML, Scala o Groovy. Casi todas las tecnologías que pueda imaginar están disponibles, por ejemplo, HTTP, FTP, JMS, EJB, JPA, RMI, JMS, JMX, LDAP, Netty, etc.

Echa un vistazo a este article y al artículo de patrón EIP.

¿Cómo interactúa con una aplicación escrita en Java?

Camel usa un lenguaje específico de dominio de Java o DSL para crear patrones de integración de empresa o rutas en una variedad de lenguajes específicos de dominio (DSL), como se indica a continuación.

Java DSL : un DSL basado en Java que utiliza el estilo de constructor fluido.

La historia de Enterprise Integration Pattern se resuelve alrededor de estos conceptos:

Mensaje, punto final, productor, consumidor, enrutamiento, bus, transformación y proceso .

Eche un vistazo a este article por Anirban Konar para uno de los casos de uso en tiempo real.

¿Es algo que va de la mano con el servidor?

Actúa como un puente entre múltiples subsistemas empresariales.

¿Es un programa independiente?

Apache Camel, un marco de integración, integra diferentes aplicaciones independientes.

La principal ventaja de Camel : puede integrar diferentes aplicaciones con diferentes tecnologías (y diferentes protocolos) utilizando los mismos conceptos para cada integración.


Apache Camel es un marco de Java para la integración empresarial. Por ejemplo: si está creando una aplicación web que interactúa con muchas API de proveedores, podemos utilizar el camello como herramienta de integración externa. Podemos hacer más con él basado en el caso de uso. Camel in Action de las publicaciones Manning es un gran libro para aprender Camel. Las integraciones se pueden definir a continuación.

Java DSL

from("jetty://0.0.0.0:8080/searchProduct").routeId("searchProduct.products").threads() .log(LoggingLevel.INFO, "searchProducts request Received with body: ${body}") .bean(Processor.class, "createSearchProductsRequest").removeHeaders("CamelHttp*") .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http4.HttpMethods.POST)) .to("http4://" + preLiveBaseAPI + searchProductsUrl + "?apiKey=" + ApiKey + "&bridgeEndpoint=true") .bean(Processor.class, "buildResponse").log(LoggingLevel.INFO, "Search products finished");

Esto es solo para crear un punto final de REST API que a su vez llama a una API externa y envía la solicitud de vuelta

Primavera DSL

<route id="GROUPS-SHOW"> <from uri="jetty://0.0.0.0:8080/showGroups" /> <log loggingLevel="INFO" message="Reqeust receviced service to fetch groups -> ${body}" /> <to uri="direct:auditLog" /> <process ref="TestProcessor" /> </route>

Llegando a tus preguntas

  1. ¿Qué es exactamente? Respuesta: - Es un marco que implementa patrones de integración empresarial.
  2. ¿Cómo interactúa con una aplicación escrita en Java? Respuesta: puede interactuar con cualquier protocolo disponible como http, ftp, amqp, etc.
  3. ¿Es algo que va de la mano con el servidor? Respuesta: - Se puede implementar en un contenedor como Tomcat o se puede implementar de forma independiente como un proceso Java
  4. ¿Es un programa independiente? Respuesta: - Puede ser.

Espero eso ayude


Aquí hay otro intento de hacerlo.

Usted sabe cómo hay / hubo cosas como Webmethods, ICAN Seebeyond, Tibco BW, IBM Broker. Todos ayudaron con soluciones de integración en la empresa. Estas herramientas se conocen comúnmente con el nombre de Enterprise Application Integration (EAI).

La mayoría de las herramientas de arrastre y arrastre fueron creadas alrededor de estas tecnologías y en partes tendrías que escribir adaptadores en Java. Estos códigos de adaptador no se probaron o tenían herramientas / automatización deficientes en las pruebas.

Al igual que con los patrones de diseño en la programación, tiene patrones de integración empresarial para soluciones de integración comunes. Se hicieron famosos por un libro del mismo nombre de Gregor Hohpe y Bobby Woolf.

Aunque es bastante posible implementar soluciones de integración que usan uno o varios EIP, Camel es un intento de hacer esto dentro de su base de código usando uno de XML, Java, Groovy o Scala.

Camel admite todos los patrones de integración empresarial enumerados en el libro a través de su rico DSL y mecanismo de enrutamiento.

Así que Camel es una tecnología que compite con otras herramientas EAI con mejor soporte para probar su código de integración. El código es conciso debido a los lenguajes específicos del dominio (DSL). Es legible incluso para usuarios de negocios, es gratis y lo hace productivo.


Basado en la analoga

El enrutamiento basado en camellos se puede entender mucho fácilmente poniéndose en la piel de un propietario de una aerolínea (por ejemplo, American Airlines, Jet Airways).

El propósito de ''su aerolínea'' es ''transportar'' ''pasajeros'' de una ''ciudad'' a otra en el mundo. Utiliza aeronaves de diferentes ''compañías de aviones'' como Boeing, Airbus, HAL para transportar pasajeros.

Los pasajeros de las líneas aéreas de su aerolínea utilizan los "aeropuertos" de la ciudad y los utilizan utilizando el aeropuerto de la ciudad. Un pasajero puede "viajar" a varias ciudades, pero en cualquier lugar debe pasar por el aeropuerto para viajar entre los aviones de su aerolínea y la ciudad.

Tenga en cuenta que un pasajero que ''sale'' de la ciudad es esencialmente ''que llega'' al avión de su aerolínea. Y un pasajero que ''llega'' a la ciudad, esencialmente se está alejando de la aeronave. Dado que estamos en el lugar del propietario de una aerolínea, el término "pasajero que llega" y "pasajero que sale" se invierte de nuestras nociones convencionales que se basan en la perspectiva de las ciudades.

La misma infraestructura de ''aeropuerto'' de cada ciudad es utilizada por los pasajeros que ''salen'' y los pasajeros ''que llegan''. Un aeropuerto proporciona "infraestructura de salida" para los pasajeros que salen, que es diferente de la "infraestructura de llegada" proporcionada para los pasajeros que llegan.

Los pasajeros pueden continuar haciendo su día a sus actividades debido a las diversas "amenidades" proporcionadas dentro de la aeronave por sus aerolíneas mientras viajan.

Además de eso, su aerolínea también ofrece instalaciones de salones para tratamientos especiales como "entender el idioma local" y / o prepararle para el "viaje".

Permite reemplazar algunas palabras / frases usadas anteriormente con las siguientes:

tu aerolínea: Apache Camel

Aeronaves: Mecanismos de transporte.

el avión de su aerolínea: el mecanismo de transporte subyacente de Apache Camel

llevar: ruta

pasajeros: mensaje;

ciudad: sistema;

aeropuerto: Componente Camel;

comprensión de los idiomas locales: conversiones de tipo;

partiendo: produciendo, produciendo

llegando: consumiendo, consumiendo

viaje: enrutado

comodidades: siempre

Después de reemplazar las palabras, esto es lo que obtienes:

El propósito de ''Apache Camel'' es encaminar los ''mensajes'' de un ''sistema'' a otro en el mundo. Apache camel utiliza diferentes mecanismos de transporte para el enrutamiento de mensajes.

Apache Camel recoge los mensajes usando ''Componente basado en Camel'' del sistema ''desde'' y los suelta usando el ''Componente basado en Camel'' del sistema ''a''. Un mensaje puede dirigirse a múltiples sistemas, pero en todas partes tienen que pasar por "Componentes basados ​​en camellos" para viajar entre el "mecanismo de transporte subyacente de Apache Camel" y el sistema.

Tenga en cuenta que un mensaje ''producido'' desde el sistema es esencialmente ''consumido'' en el mecanismo de transporte subyacente de Apache Camel ''. Y un mensaje consumido por un sistema, es esencialmente producido por el ''mecanismo de transporte subyacente de Apache Camel''.

Ya que estamos tratando de entender a Camel, debemos pensar desde la perspectiva de Camel a partir de aquí. El significado de los términos "mensaje del consumidor" y "mensaje del productor", por lo tanto, se revierte de nuestras nociones convencionales que se basan en la perspectiva de un sistema.

La misma infraestructura de codificación del ''Componente basado en Camel'' es utilizada por ''mensaje del productor'' y ''mensaje del consumidor''. Un ''Componente basado en Camel'' proporciona un ''punto final del productor'' para ''mensaje del productor'' y un ''punto final del consumidor'' para ''mensaje del consumidor''.

Los mensajes pueden ser procesados ​​por Camel cuando se están enrutando.

Además de este enrutamiento, Camel proporciona características especiales como ''Conversión de tipos'' y muchas más ...


Camel ayuda en el enrutamiento, transformación, monitoreo.

Utiliza Rutas; que se puede describir como:

Cuando el bus de servicio recibe un mensaje en particular, lo enrutará a través de ninguno de los destinos de servicios / intermediario, como cola / temas. Este camino se conoce como ruta.

Ejemplo: su aplicación de acciones ha recibido algún aporte del analista, se procesará a través de la aplicación / componente web y luego el resultado se publicará a todos los miembros interesados ​​/ registrados para una actualización de acciones en particular.


Camel envía mensajes de A a B:

¿Por qué todo un framework para esto? Bueno, que tal si tienes:

  • Muchos remitentes y muchos receptores.
  • una docena de protocolos ( ftp , http , jms , etc.)
  • muchas reglas complejas
    • Enviar un mensaje A a los receptores A y B solamente
    • Envíe un mensaje B al Receptor C como XML , pero tradúzcalo en parte, enriquézcalo (agregue metadatos) e IF condición X , luego envíelo también al Receptor D, pero como CSV .

Así que ahora necesitas:

  • traducir entre protocolos
  • pegar los componentes juntos
  • definir rutas - que va donde
  • filtrar algunas cosas en algunos casos

Camel te da lo anterior (y más) fuera de la caja:

con un lenguaje DSL genial para que definas qué y cómo:

new DefaultCamelContext().addRoutes(new RouteBuilder() { public void configure() { from("jms:incomingMessages") .choice() // start router rules .when(header("CamelFileName") .endsWith(".xml")) .to("jms:xmlMessages") .when(header("CamelFileName") .endsWith(".csv")) .to("ftp:csvMessages"); }

Vea también this y this y Camel en Acción (como han dicho otros, ¡un excelente libro!)


Crear una descripción del proyecto no debe ser complicado.

Yo digo:

Apache Camel es una tecnología de mensajería pegada con enrutamiento. Une puntos de inicio y final de mensajería que permiten la transferencia de mensajes de diferentes fuentes a diferentes destinos. Por ejemplo: JMS -> JSON, HTTP -> JMS o canalización FTP -> JMS, HTTP -> JMS, JSON -> JMS

Wikipedia dice:

Apache Camel es un motor de enrutamiento y mediación basado en reglas que proporciona una implementación basada en objetos Java de los Patrones de integración empresarial utilizando una API (o un declarativo lenguaje específico de dominio de Java) para configurar las reglas de enrutamiento y mediación. El lenguaje específico del dominio significa que Apache Camel puede admitir la finalización inteligente y segura de tipos de las reglas de enrutamiento en su IDE utilizando un código Java normal sin grandes cantidades de archivos de configuración XML; aunque la configuración XML dentro de Spring también es compatible.

¿Ver? Eso no fue difícil, ¿verdad?


En breve:

Cuando exista un requisito para conectar / integrar sistemas, probablemente necesitará conectarse a algún origen de datos y luego procesar estos datos para que coincidan con los requisitos de su negocio.

Para hacer eso:

1) Podría desarrollar un programa personalizado que lo haría (podría llevar mucho tiempo y ser difícil de entender, mantener para otro desarrollador)

2) Alternativamente, podría usar Apache Camel para hacerlo de manera estandarizada (tiene la mayoría de los conectores ya desarrollados para usted, solo necesita configurarlo y conectar su lógica, llamada Proceso):

Camel te ayudará a:

  1. Consumir datos de cualquier fuente / formato.
  2. Procesar estos datos
  3. Datos de salida a cualquier fuente / formato

Al usar Apache Camel, será más fácil de entender / mantener / extender su sistema a otro desarrollador.

Apache Camel está desarrollado con patrones de integración empresarial. Los patrones te ayudan a integrar sistemas de una buena manera :-)


En un lenguaje sencillo, el camello hace (muchas) cosas sin mucho código de placa de caldera.

Solo para darle una perspectiva, el DSL de Java que se proporciona a continuación creará un punto final REST que podrá aceptar un XML que consiste en la Lista de Productos y lo divide en varios productos e invoca el método de Proceso de Marca del Procesador con él. Y solo agregando .parallelProcessing (note la parte comentada) procesará en paralelo todos los Objetos del Producto. (La clase de producto es un código auxiliar Java generado por JAXB / XJC desde el XSD al que está limitado el xml de entrada). Este código (junto con algunas dependencias de Camel) completará el trabajo que solía tomar cientos de líneas de código Java.

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST") .split(stax(Product.class)) /*.parallelProcessing()*/ .process(itemDeltaProcessor);

Después de agregar el ID de ruta y la declaración de registro

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST") .routeId("Item-DeltaRESTRoute") .log(LoggingLevel.INFO, "Item Delta received on Item-DeltaRESTRoute") .split(stax(Product.class)) .parallelProcessing() .process(itemDeltaProcessor);

Esto es solo una muestra, Camel es mucho más que un punto final de REST. Simplemente eche un vistazo a la lista de componentes conectables http://camel.apache.org/components.html


En una empresa, existen varios sistemas de diferentes tipos. Algunos de estos pueden ser sistemas heredados, mientras que otros pueden ser nuevos. Estos sistemas a menudo interactúan entre sí, y necesitan ser integrados. Esta interacción o integración no es fácil ya que las implementaciones de los sistemas, sus formatos de mensaje pueden diferir. Una forma de lograr esto es implementar un código que salve estas diferencias. Sin embargo esto será integración punto a punto. Si mañana otra vez, si hay un cambio en un sistema, el otro también tendrá que cambiarse, lo que no es bueno. En lugar de esta integración punto a punto que provoca un acoplamiento estrecho, podemos implementar una capa adicional para mediar las diferencias entre los sistemas. Esto resulta en un acoplamiento flojo y no afecta mucho a nuestros sistemas existentes. Apache Camel es un motor de enrutamiento y mediación basado en reglas que proporciona una implementación basada en objetos de Java de los Patrones de Integración Empresarial utilizando una API (o lenguaje declarativo de dominio específico de Java) para configurar las reglas de enrutamiento y mediación.
Explicación detallada y ejemplos se pueden encontrar aquí Tutoriales de Apache Camel


Es como una conexión de tubería

From---->To

Entre u puede agregar tantos canales y tuberías. El grifo puede ser de cualquier tipo automático o manual para el flujo de datos y una ruta para canalizar el flujo.

Soporta y tiene implementación para todos los tipos y tipos de procesamiento. Y para el mismo procesamiento muchos enfoques, ya que tiene muchos componentes y cada componente también puede proporcionar el resultado deseado utilizando diferentes métodos.

Por ejemplo, la transferencia de archivos se puede hacer en camello con los tipos de archivos movidos o copiados y también desde la carpeta, el servidor o la cola.

-from-->To - from-->process-->to - from-->bean-->to - from-->process-->bean-->to -from-->marshal-->process-->unmarshal-->to

De / a ---- carpeta, direct, seda, vm puede ser cualquier cosa


Hay muchos marcos que nos facilitan la mensajería y la resolución de problemas en la mensajería. Uno de estos productos es Apache Camel.

La mayoría de los problemas comunes tienen soluciones probadas llamadas patrones de diseño. El patrón de diseño para la mensajería son los patrones de integración empresarial (EIP), que se explican bien here . Apache camel nos ayuda a implementar nuestra solución utilizando los EIP.

La fortaleza de un marco de integración es su capacidad para facilitarnos a través de EIP u otros patrones, el número de transportes y componentes y la facilidad de desarrollo en la que el camello Apache se encuentra en la parte superior de la lista

Cada uno de los marcos tiene sus propias ventajas. Algunas de las características especiales del camello Apache son las siguientes.

  1. Proporciona la codificación para estar en muchos DSL, a saber, Java DSL y DSL basado en Spring XML, que son populares.
  2. Fácil de usar y simple de usar.
  3. Fuse IDE es un producto que le ayuda a codificar a través de la interfaz de usuario

La mayoría de las cosas "nuevas" en informática no son realmente nuevas en absoluto, solo son una envoltura desconcertante de algo que ya se entiende bien. Cuando son difíciles de entender, generalmente es porque alguien decidió inventar nuevos términos de lenguaje o colonizar los términos existentes para un propósito diferente (un buen ejemplo de esto es la reversión de los desarrolladores de X de lo que significa "cliente" y "servidor").

Camel es una envoltura / API basada en Java para middleware entre aplicaciones.

Middleware es un término general para software que proporciona servicios de interpretación entre entidades que no comparten un idioma o tipos de datos comunes.

Eso es lo que Camel es, en el fondo. Podemos completar la descripción observando que proporciona middleware de tipo EIP.

No proporciona el middleware en sí, ya que no puede conocer los detalles de lo que necesitan las aplicaciones para comunicarse. Pero proporciona la API para crear las partes invariables de ese middleware (crear un punto de inicio, crear un punto final, crear condiciones para el inicio y el final, etc.)

Espero que ayude.


Mi punto de vista para describir esto de una manera más accesible ...

Para comprender qué es Apache Camel, debe comprender qué son los patrones de integración empresarial.

Comencemos con lo que presumiblemente ya sabemos: el patrón Singleton, el patrón Factory, etc. Son simplemente formas de organizar su solución al problema, pero no son soluciones en sí mismas. Estos patrones fueron analizados y extraídos para el resto de nosotros por Gang of Four, cuando publicaron su libro: Design Patterns . Ahorraron a algunos de nosotros un tremendo esfuerzo al pensar cómo estructurar mejor nuestro código.

Al igual que Gang of Four, Gregor Hohpe y Bobby Woolf fueron los autores del libro Enterprise Integration Patterns (EIP) en el que proponen y documentan un conjunto de nuevos patrones y planos sobre la mejor manera de diseñar grandes sistemas basados ​​en componentes, donde los componentes pueden ser ejecutándose en el mismo proceso o en una máquina diferente.

Básicamente, proponen que estructuremos nuestro sistema para que esté orientado a los mensajes , donde los componentes se comunican entre sí mediante mensajes como entradas y salidas, y absolutamente nada más. Nos muestran un conjunto completo de patrones que podemos elegir e implementar en nuestros diferentes componentes que formarán todo el sistema.

Entonces, ¿qué es Apache Camel?

Apache Camel le ofrece las interfaces para los EIP, los objetos base, las implementaciones que comúnmente se necesitan, las herramientas de depuración, un sistema de configuración y muchos otros ayudantes que le ahorrarán un montón de tiempo cuando desee implementar su solución para seguir los EIP.

Toma MVC. MVC es bastante simple en teoría y podríamos implementarlo sin ninguna ayuda del marco. Pero los buenos marcos MVC nos proporcionan la estructura lista para usar, han ido más allá y han pensado en todas las otras cosas "secundarias" que necesita cuando crea un gran proyecto MVC y es por eso que las usamos la mayor parte del tiempo.

Eso es exactamente lo que Apache Camel es para EIPs. Es un marco completo listo para la producción para las personas que desean implementar su solución para seguir los EIP.


Sí, esto es probablemente un poco tarde. Pero una cosa para agregar a los comentarios de todos los demás es que Camel es en realidad una caja de herramientas en lugar de un conjunto completo de características. Debe tener esto en cuenta al desarrollar y necesita realizar varias transformaciones y conversiones de protocolo.

El propio Camel se basa en otros marcos y, por lo tanto, a veces también es necesario comprenderlos para comprender cuál se adapta mejor a sus necesidades. Hay, por ejemplo, múltiples formas de manejar REST. Esto puede resultar un poco confuso al principio, pero una vez que comience a usar y probar, se sentirá cómodo y aumentará su conocimiento de los diferentes conceptos.


Si conoce los patrones de integración empresarial, Apache Camel es un marco de integración que implementa todos los EIP.

Y puede implementar Camel como una aplicación independiente en un contenedor web.

Básicamente, si tiene que integrar varias aplicaciones con diferentes protocolos y tecnologías, puede usar Camel.


Si tiene entre 5 y 10 minutos, generalmente recomiendo a las personas que lean esta Integración con Apache Camel por Jonathan Anstey. Es un artículo bien escrito que ofrece una breve introducción y una descripción general de algunos de los conceptos de Camel, e implementa un caso de uso con ejemplos de código. En ella, Jonathan escribe:

Apache Camel es un marco Java de código abierto que se enfoca en hacer que la integración sea más fácil y más accesible para los desarrolladores. Lo hace proporcionando:

  • implementaciones concretas de todos los patrones de integración empresarial (EIP) ampliamente utilizados
  • Conectividad a una gran variedad de transportes y APIs.
  • Lenguajes específicos de dominio (DSL) fáciles de usar para conectar EIP y transportes juntos

También hay un capítulo gratuito de Camel en acción que presenta Camel en el primer capítulo. Jonathan es coautor de ese libro conmigo.


Un diagrama es mejor que miles de descripciones. Este diagrama ilustra la arquitectura del camello.


Una de las cosas que debe comprender, antes de intentar comprender Apache Camel, son los patrones de integración empresarial. No todos en el campo son realmente conscientes de ellos. Si bien puede leer el libro Patrones de integración empresarial, una forma más rápida de actualizarlos sería leer algo como el artículo de Wikipedia sobre Integración de aplicaciones empresariales .

Una vez que haya leído y comprendido el área temática, es mucho más probable que comprenda el propósito de Apache Camel

HTH


Una definición desde otra perspectiva:

Apache Camel es un framework de integración. Consiste en algunas bibliotecas de Java, que le ayudan a implementar problemas de integración en la plataforma Java. Lo que esto significa y en qué se diferencia de las API por un lado y de un Enterprise Service Bus (ESB) en el otro lado se describe en mi artículo " Cuándo usar Apache Camel ".