¿Qué es exactamente Apache Camel?

No entiendo exactamente qué hace 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 junto con el servidor?
  • Es un progtwig independiente?

Por favor explica qué es Camel.

Si tiene de 5 a 10 minutos, generalmente recomiendo a la gente que lea esta integración con Apache Camel por Jonathan Anstey. Es una pieza bien escrita que brinda una breve introducción y una visión general de algunos de los conceptos de Camel, e implementa un caso de uso con ejemplos de código. En él, Jonathan escribe:

Apache Camel es un framework 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 al proporcionar:

  • implementaciones concretas de todos los Patrones de Integración Empresarial ampliamente utilizados (EIP)
  • conectividad a una gran variedad de transportes y API
  • Lenguajes específicos de dominio (DSL) fáciles de usar para conectar EIPs y transportes juntos

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

Mi opinión para describir esto de una manera más accesible …

Para entender 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 rest de nosotros por The Gang of Four, cuando publicaron su libro: Design Patterns . Nos ahorraron a algunos de nosotros un tremendo esfuerzo al pensar cómo estructurar mejor nuestro código.

Al igual que la Banda de los Cuatro, Gregor Hohpe y Bobby Woolf crearon el libro Patrones de Integración Empresarial (EIP) en el que proponen y documentan un conjunto de nuevos patrones y modelos de cómo podemos diseñar mejor los sistemas basados ​​en componentes grandes, donde los componentes pueden ser corriendo en el mismo proceso o en una máquina diferente.

Básicamente, proponen que estructuramos nuestro sistema para que esté orientado a los mensajes , donde los componentes se comunican entre sí utilizando 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 juntos formarán el sistema completo.

Entonces, ¿qué es Apache Camel?

Apache Camel le ofrece las interfaces para los EIP, los objetos básicos, las implementaciones comúnmente necesarias, 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 marco. Pero los buenos frameworks de MVC nos proporcionan la estructura lista para usar y han hecho un esfuerzo adicional y han pensado en todas las demás cosas “secundarias” que necesita cuando crea un gran proyecto de MVC y es por eso que las usamos la mayor parte del tiempo.

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

Crear una descripción del proyecto no debería ser complicado.

Yo digo:

Apache Camel es un pegamento de tecnología de mensajería con enrutamiento. Une los puntos de inicio y fin de los mensajes que permiten la transferencia de mensajes de diferentes fonts a diferentes destinos. Por ejemplo: JMS -> JSON, HTTP -> JMS o embudo 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 Patrones de Integración Empresarial utilizando una API (o Lenguaje Específico Específico de Dominio de Java) para configurar reglas de enrutamiento y mediación. El lenguaje específico del dominio significa que Apache Camel puede admitir la finalización inteligente segura de tipos de las reglas de enrutamiento en su IDE utilizando 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, es probable que deba conectarse a alguna fuente de datos y luego procesar estos datos para que coincidan con los requisitos de su negocio.

Para hacer eso:

1) Puede desarrollar un progtwig personalizado que lo haga (puede 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 configurarlos y conectar su lógica, llamada Proceso):

Camel te ayudará a:

  1. Consumir datos de cualquier fuente / formato
  2. Procesar esta información
  3. Salida de datos a cualquier fuente / formato

Al utilizar Apache Camel, le resultará fácil comprender / mantener / extender su sistema a otro desarrollador.

Apache Camel está desarrollado con Enterprise Integration Patterns. Los patrones te ayudan a integrar los sistemas de una buena manera 🙂

Un diagtwig es mejor que miles de descripciones. Este diagtwig ilustra la architecture de Camel.

enter image description here

Camel envía mensajes de A a B:

enter image description here

¿Por qué un marco completo para esto? Bueno, y si tienes:

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

Entonces ahora necesitas:

  • traducir entre protocolos
  • pegue los componentes juntos
  • definir rutas – qué va donde
  • filtrar algunas cosas en algunos casos

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

enter image description here

con un lenguaje DSL atractivo para que usted pueda definir 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"); } 

Ver también esto y esto y Camel in Action (como han dicho otros, ¡un libro excelente!)

Una de las cosas que debe entender, antes de intentar comprender Apache Camel, son los Patrones de Integración Empresarial. No todos en el campo realmente están al tanto de ellos. Si bien puede leer el libro de Patrones de Integración Empresarial, una manera más rápida de ponerse al día sobre ellos sería leer algo como el artículo de Wikipedia sobre Integración de Aplicaciones Empresariales .

Una vez que haya leído y entendido el tema, es mucho más probable que comprenda el propósito de Apache Camel

HTH

BASADO EN ANALOGÍA

El enrutamiento basado en Camel puede entenderse 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 aéreas” como Boeing, Airbus, HAL para transportar pasajeros.

Los pasajeros de las juntas de su aerolínea usan los “aeropuertos” de la ciudad y los desplazan usando el aeropuerto de la ciudad. Un pasajero puede “viajar” a varias ciudades, pero en todas partes tiene que pasar por el aeropuerto para viajar entre la aeronave de su aerolínea y la ciudad.

Tenga en cuenta que un pasajero que “sale” de la ciudad esencialmente está “llegando” a la aeronave de su aerolínea. Y un pasajero que “llega” a la ciudad, esencialmente se está alejando del avión. Dado que estamos en la piel del propietario de la línea aérea, el término “pasajero de llegada” y “pasajero de salida” se revierten 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 parten” y los pasajeros “de llegada”. Un aeropuerto proporciona ‘infraestructura de salida’ para los pasajeros que salen, que es diferente de la ‘infraestructura de llegada’ provista para los pasajeros que llegan.

Los pasajeros pueden continuar haciendo su día para sus actividades debido a varias ‘comodidades’ proporcionadas dentro del avión por sus aerolíneas, mientras viajan.

Además de eso, su aerolínea también ofrece instalaciones de salón para tratamientos especiales como “entender el idioma local” y / o prepararse para el “viaje”.

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

su aerolínea: Apache Camel

compañías aéreas: 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;

entendiendo los idiomas locales: tipo de conversiones;

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 enrutar ‘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 ‘Camel based Component’ del sistema ‘from’ y los suelta usando el ‘Camel based Component’ del sistema ‘to’. Un mensaje puede encaminarse a múltiples sistemas, pero en todas partes tienen que pasar por ‘Componentes basados ​​en Camel’ 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’.

Como intentamos entender a Camel, debemos pensar desde la perspectiva de Camel aquí en adelante. El significado de los términos ‘mensaje del consumidor’ y ‘mensaje del productor’ se revierte de nuestras nociones convencionales que se basan en la perspectiva de un sistema.

La misma infraestructura de encoding de ‘Componentes basados ​​en Camel’ es utilizada por ‘mensaje de productor’ y ‘mensaje de consumidor’. Un ‘Componente basado en Camel’ proporciona un ‘punto final productor’ para ‘mensaje productor’ y ‘punto final consumidor’ para ‘mensaje consumidor’.

Los mensajes pueden ser procesados ​​por Camel cuando se enrutan.

Además de esta ruta, Camel ofrece características especiales como ‘Conversión de tipo’ y muchas más …

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.

Una definición desde otra perspectiva:

Apache Camel es un marco de integración. Consiste en algunas bibliotecas de Java, que lo ayudan a implementar problemas de integración en la plataforma Java. Lo que esto significa y cómo difiere de las API, por un lado, y un Enterprise Service Bus (ESB) en el otro lado se describe en mi artículo ” Cuándo usar Apache Camel “.

¿Qué es exactamente?

Apache Camel es un marco de integración liviano que implementa todos los patrones de Integración Empresarial. Puede integrar fácilmente diferentes aplicaciones usando los patrones requeridos.

Puede 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.

Eche un vistazo a este artículo y al artículo de patrón de EIP

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

Camel utiliza un Lenguaje Específico de Dominio de Java o DSL para crear Patrones de Integración Empresarial o Rutas en una variedad de lenguajes específicos de dominio (DSL) como se detalla a continuación.

Java DSL : una DSL basada en Java que utiliza el estilo de constructor fluido.

La historia de Enterprise Integration Pattern se resuelve en torno a estos conceptos:

Mensaje, Punto final, Productor, Consumidor, Enrutamiento, Bus, Transformación y Proceso .

Echa un vistazo a este artículo por Anirban Konar para uno de los casos de uso en tiempo real.

¿Es algo que va junto con el servidor?

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

Es un progtwig 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.

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

Camel es un wrapper / API basado en Java para middleware entre aplicaciones.

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

Eso es lo que Camel es, en el fondo. Podemos desarrollar la descripción al señalar que proporciona middleware de tipo EIP.

No proporciona el middleware en sí, ya que no puede conocer los detalles de lo que las aplicaciones necesitan 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 iniciar y finalizar, etc.)

Espero que ayude.

Aquí hay otro bash de hacerlo.

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

En su mayoría había herramientas de arrastre creadas en torno a estas tecnologías y en partes habría que escribir adaptadores en Java. Estos códigos de adaptador no fueron probados o tuvieron una herramienta / automatización pobre en las pruebas.

Al igual que con los patrones de diseño en progtwigció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 intenta hacer esto dentro de su base de código utilizando 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 mecanismo de enrutamiento y DSL.

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

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

La mayoría de los problemas comunes tienen soluciones comprobadas llamadas patrones de diseño. El patrón de diseño para la mensajería es Enterprise Integration patterns (EIPs) que se explican bien aquí . Apache camel nos ayuda a implementar nuestra solución usando los EIP.

La fuerza de un marco de integración es su capacidad para facilitarnos mediante EIP u otros patrones, el número de transportes y componentes y la facilidad de desarrollo en la que Apache camel se encuentra en la parte superior de la lista

Cada uno de los Frameworks tiene sus propias ventajas Algunas de las características especiales de Apache camel son las siguientes.

  1. Proporciona la encoding en muchas DSL, es decir, DSL Java y DSL basada en Spring xml, que son populares.
  2. Uso fácil y simple de usar.
  3. Fuse IDE es un producto que te ayuda a codificar a través de UI

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

Solo para darle una perspectiva, la DSL de Java que se proporciona a continuación creará un punto final REST que podrá aceptar un XML que consista en la Lista de productos y lo divida en múltiples productos e invoque con él el método de proceso de BrandProcessor. Y simplemente agregando .parallelProcessing (observe la parte comentada) procesará paralelamente todos los Objetos del Producto. (La clase de producto es JAXB / XJC generado como código Java del XSD al que se limita la entrada xml). Este código (junto con algunas dependencias Camel) hará 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 la identificación de ruta y la statement 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 REST. Simplemente eche un vistazo a la lista de componentes conectables http://camel.apache.org/components.html

Camel ayuda a enrutar, transformar y monitorear.

Utiliza Rutas; que se puede describir como:

Cuando el bus de servicio recibe un mensaje particular, lo enrutará a través de un n. ° de destinos de servicios / intermediarios como cola / temas. Esta ruta se conoce como ruta.

Ejemplo: su aplicación de stock tiene alguna entrada por analista, se procesará a través de la aplicación / componente web y luego se publicará el resultado a todos los miembros interesados ​​/ registrados para una actualización de stock particular.

Sí, esto es probablemente un poco tarde. Pero una cosa para agregar a los comentarios de 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 debe realizar varias transformaciones y conversiones de protocolo.

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

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 deben integrarse. 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 vincule 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 podría tener que cambiarse, lo cual no es bueno. En lugar de esta integración punto a punto que causa un acoplamiento fuerte, podemos implementar una capa adicional para mediar las diferencias entre los sistemas. Esto da como resultado 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 Java de los Patrones de Integración Empresarial utilizando una API (o Lenguaje Específico 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

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 usar el camello como herramienta de integración externa. Podemos hacer más con él en función del caso de uso. Camel in Action de las publicaciones de 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 para crear un punto final de la API REST que a su vez llama a una API externa y envía la solicitud de vuelta

DSL de spring

       

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? Resp .: puede interactuar con cualquier protocolo disponible como http, ftp, amqp, etc.
  3. ¿Es algo que va junto con el servidor? Resp .: se puede implementar en un contenedor como tomcat o se puede implementar de forma independiente como un proceso de Java
  4. Es un progtwig independiente? Respuesta: – Puede ser.

Espero eso ayude

Es como una tubería que conecta

 From---->To 

En el medio puedes agregar tantos canales y tuberías. El faucet puede ser de cualquier tipo automático o manual para el flujo de datos y una ruta para canalizar el flujo.

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

Por ejemplo, la transferencia de archivos se puede hacer en camello con archivos de tipo 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, directo, seda, vm puede ser cualquier cosa

    Intereting Posts