¿Qué es exactamente Apache Camel?

1360

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 junto con el servidor?
  • ¿Es un programa independiente?

Por favor explique qué es Camel.

Myy
fuente

Respuestas:

719

Si tiene de 5 a 10 minutos, generalmente recomiendo a las personas que lean esta integración con Apache Camel por Jonathan Anstey. Es una pieza bien escrita que ofrece 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 marco de 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 API
  • 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 in Action que presenta Camel en el primer capítulo. Jonathan es coautor de ese libro conmigo.

Claus Ibsen
fuente
55
El libro Camel in Action es un libro muy bueno para aprender los conceptos básicos y también cómo usar algunas de las características más complicadas de Camel. ¡Lo recomiendo altamente! (De ninguna manera estoy afiliado con el libro o el editor)
Matt Aldridge
2
@Clause si quieres elegir entre mula ESB y Camel. ¿Cuál debería ser mi desmayo al elegir uno sobre el otro
kuhajeyan
8
Vea algunos de los enlaces en la comparación con los competidores de Camels en: camel.apache.org/articles.html .
Claus Ibsen
1
Sí, absolutamente se puede usar para conectar microservicios, después de todo es solo un pequeño kit de herramientas / marco de Java. El libro Camel in Action 2nd edition tiene un capítulo completo sobre microservicios Camel.
Claus Ibsen
1
¿Qué son los "Patrones de integración empresarial (EIP)" que preguntas? Todo lo que tiene que hacer para averiguarlo es "Comprar el libro Patrones de integración empresarial ..."
José Quinteiro,
1130

Mi opinión 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 . Nos ahorraron a algunos de nosotros un tremendo esfuerzo al pensar en cómo estructurar mejor nuestro código.

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

Básicamente, proponen que estructuramos nuestro sistema para que esté orientado a 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 todo el sistema.

Entonces, ¿qué es Apache Camel?

Apache Camel le ofrece las interfaces para los EIP, los objetos base, 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 del marco. Pero los buenos marcos MVC nos proporcionan la estructura lista para usar y han hecho un esfuerzo adicional y 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 es Apache Camel para EIP. Es un marco completo listo para la producción para las personas que desean implementar su solución para seguir los EIP.

Amr Mostafa
fuente
183
Esta es probablemente la mejor respuesta a la pregunta. Todas las otras respuestas son tan confusas como todos los demás artículos en Internet
Nerrve
19
EIP es la clave. Si no comprende EIP, puede usar Camel como ciegos y elefante (camello). EIP - eaipatterns.com
hutingung
22
+50 para esta respuesta, comenzando con la introducción a EIP y analogía con GOF y MVC y frameworks. A partir de la pregunta, parece que OP no tiene idea de EIP. Estaba en el mismo bote, antes de leer esta respuesta
Estudiante
66
Esta descripción debe agregarse a la página de inicio de Apache Camel, ya que responde a la pregunta y más. Exactamente en cuanto a su uso de la analogía con el MVC escrito a mano o mediante el uso de una 'herramienta' para ayudarme a hacer esta respuesta, me ha dado una comprensión sin tener que rastrear a través de un sinfín de otros enlaces (útiles) cuando todo lo que se necesitaba era sucinto. responder.
Azkuma
2
Un poco de problemas EIP: "Ha habido muchas bibliotecas y marcos a lo largo de los años para ayudar con la integración. Pero con frecuencia los conceptos detrás de los Patrones de Integración Empresarial se transforman en algunas jerarquías de clases complejas u objetos que necesitan ser conectados entre sí de manera justa. , y las intenciones y patrones originales a menudo se pierden. El desarrollador se ve obligado a partir de entonces a centrarse en los detalles de bajo nivel y en algunas API de biblioteca de clases complejas, perdiendo la imagen y los patrones más grandes ".
Quan Nguyen
659

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

Yo digo:

Apache Camel es pegamento de tecnología de mensajería con enrutamiento. Une los puntos de inicio y finalización de la mensajería permitiendo la transferencia de mensajes de diferentes fuentes 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 los patrones de integración empresarial utilizando una API (o lenguaje específico de dominio Java declarativo) 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 de las reglas de enrutamiento en su IDE usando 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?

David Newcomb
fuente
307
La página de inicio de Apache Camel se refiere a este hilo ... No lograron proporcionar una breve explicación funcional de su propio producto.
youri
15
Este artículo es un excelente ejemplo de cómo la crítica constructiva y el esfuerzo honesto pueden crear documentación sublime. Se presenta en el sitio web oficial de Camel. Pero sigamos siendo constructivos y evitemos el etiquetado de nombres. Los escritores de documentación y otros colaboradores a veces son difíciles de encontrar y merecen nuestro respeto. Por cierto, tenemos muchos estándares de codificación de Java ... y nos apegamos con orgullo y honor ... ¿qué tal un estándar de documentación para medios como Wiki y Guías oficiales?
YoYo
1
¿Es como un proxy inverso de grano fino?
Asad Hasan
1
Encontré esta respuesta a través del enlace de la página de inicio de Camel. Me asombra que no lo citen directamente en su página o incluso que no tengan un enlace específico a la respuesta.
Jelling
99
Ahora, esto es lo que yo llamo crujiente y al punto de respuesta. Curiosamente, la respuesta aceptada parece un anuncio. +1
EMM
120

En breve:

Cuando haya un requisito para conectar / integrar sistemas, probablemente necesitará 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 programa personalizado que lo haga (puede llevar mucho tiempo y es difícil de entender, mantener para otro desarrollador)

2) Alternativamente, puede 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, facilitará la comprensión / mantenimiento / extensión de 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 :-)

Marcin Wasiluk
fuente
¿Eso significa que otros desarrolladores también pueden cambiar la lógica en otro lenguaje de programación?
JavaTechnical
1
@JavaTechnical dado el patrón de mensajería (EIP), ya puede codificar diferentes componentes en diferentes idiomas porque estos mensajes están en formatos independientes del idioma como JSON. Camel proporciona un marco fácil de implementar EIP. Esto se basa en mi comprensión. Por favor corrígeme si me equivoco.
Dheeraj Bhaskar
98

Camel envía mensajes de A a B:

ingrese la descripción de la imagen aquí

¿Por qué todo un marco 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 en parte traduzca , enriquezca (agregue metadatos) y la condición IF X , luego envíelo también al receptor D, pero como CSV .

Entonces ahora necesitas:

  • traducir entre protocolos
  • pegar componentes juntos
  • definir rutas: qué va a dónde
  • filtrar algunas cosas en algunos casos

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

ingrese la descripción de la imagen aquí

con un lenguaje DSL genial para que puedas 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");
}

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

Andrejs
fuente
75

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

ingrese la descripción de la imagen aquí

CarmesíFantasía
fuente
55

BASADO EN ANALOGIA

El enrutamiento basado en camellos se puede entender fácilmente poniéndose en el lugar del 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 aviones de diferentes 'compañías aéreas' como Boeing, Airbus, HAL para transportar pasajeros.

La aerolínea aborda a los pasajeros que utilizan los "aeropuertos" de la ciudad y los baja a bordo utilizando 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 el avión de su aerolínea y la ciudad.

Tenga en cuenta que un pasajero que "sale" de la ciudad está esencialmente "llegando" al avión de su aerolínea. Y un pasajero que "llega" a la ciudad, esencialmente se aleja del avión. Dado que estamos en el lugar del propietario de la aerolínea, el término "pasajero de llegada" y "pasajero de salida" 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 dedicando su día a sus actividades debido a las diversas 'comodidades' provistas 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 prepararlo para el 'viaje'.

Vamos a reemplazar algunas palabras / frases utilizadas anteriormente con lo siguiente:

su aerolínea: Apache Camel

empresas de aviones: 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 de camello;

comprensión de idiomas locales: conversiones de tipos;

Partiendo: produciendo, produciendo

llegando: consumiendo, consumido

viaje: enrutado

servicios: 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 mensajes usando el 'Componente basado en Camel' del sistema 'desde' y los suelta usando el 'Componente basado en Camel' del sistema 'a'. Un mensaje puede enrutarse 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 estamos tratando de entender Camel, debemos pensar desde la perspectiva de Camel en adelante. El significado de los términos "mensaje del consumidor" y "mensaje del productor", por lo tanto, se invierte de nuestras nociones convencionales que se basan en la perspectiva de un sistema.

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

Camel puede procesar los mensajes cuando se enrutan.

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

DolphinJava
fuente
Gran explicación agradable de leer y fácil de recordar. Me pregunto qué papel tiene una pista o piloto, si es que existen en camello.
Stimpson Cat
Buena explicación, especialmente el ejemplo del aeropuerto sigue así. ¡si agregaras algunos términos más extendidos y un pequeño ejemplo de código sería realmente genial! Gracias
Ankur Nirmalkar
50

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 ponerse al día con ellos sería leer algo como el artículo de Wikipedia sobre la integración de aplicaciones empresariales .

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

HTH

Crollster
fuente
35

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.

Sunil
fuente
22

Una definición desde otra perspectiva:

Apache Camel es un marco de integración. Consiste en algunas bibliotecas Java, que le 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) por el otro lado se describe en mi artículo " Cuándo usar Apache Camel ".

Kai Wähner
fuente
18

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

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.

Echa un vistazo a este artículo y al artículo del patrón EIP

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

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

Java DSL : un DSL basado en Java que utiliza el estilo de generador 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 .

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

¿Es algo que va junto con el servidor?

Actúa como un puente a través de 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.

Ravindra babu
fuente
Me pregunto por qué usas la palabra "ligero". Mi observación es que Apache Camel es realmente pesado.
Krzysztof Tomaszewski
13

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

Camel es un contenedor / API basado 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 común o tipos de datos.

Eso es Camel, 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 comenzar y finalizar, etc.)

Espero que ayude.

MMacD
fuente
44
"La mayoría de las cosas" nuevas "en informática no son realmente nuevas en absoluto, son solo una envoltura desconcertante en torno a algo que ya se entiende bien". <<<< ¡Lo mejor que he leído toda la semana!
Dave
8

Aquí hay otro intento de hacerlo.

Ya sabe cómo hay / fueron 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 de integración de aplicaciones empresariales (EAI).

En su mayoría, había herramientas de arrastrar y soltar construidas alrededor de estas tecnologías y, en algunas partes, tendría que escribir adaptadores en Java. Estos códigos de adaptador no fueron probados o tenían herramientas / automatización deficientes en las pruebas.

Al igual que con los patrones de diseño en 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 hacerlo 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.

Entonces, Camel es una tecnología competitiva para otras herramientas EAI con un mejor soporte para probar su código de integración. El código es conciso debido a los lenguajes específicos de dominio (DSL). Incluso los usuarios empresariales pueden leerlo, es gratis y lo hace productivo.

skipy
fuente
7

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 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 aquí . 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, la cantidad 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 muchas DSL, a saber, DSL Java y DSL basado 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 la interfaz de usuario
Naveen Raj
fuente
7

En inglés simple, 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 una Lista de productos y lo dividirá en múltiples productos e invocará el Método de proceso de BrandProcessor. Y solo agregando .parallelProcessing (tenga en cuenta 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 a partir del XSD al que está confinado el xml de entrada). Este código (junto con algunas dependencias de 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 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 REST. Solo eche un vistazo a la lista de componentes conectables http://camel.apache.org/components.html

Rey Julien
fuente
6

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 servicios / destinos de intermediario, como cola / temas. Este camino se conoce como ruta.

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

sa_nyc
fuente
5

Suponga que crea una empresa de comercio electrónico como Amazon, y desea centrarse solo en la estrategia / elección de los productos para vender. a diferencia de la flota de entrega de Amazon, en lugar de manejar el traslado de mercancías de los vendedores al almacén, realizar cambios en él como el embalaje y enviarlo a otras ciudades y clientes. Contratas a una empresa que hace todo esto y solo les das información de todas las ubicaciones de tu almacén, tipos de vehículos, ubicaciones de entrega y una lista de cuándo hacer qué. Luego manejan eso por sí mismos, ese sería Apache Camel. Se encargan de mover las cosas de un extremo a otro, una vez que les entregas las cosas, para que puedas concentrarte en otras cosas.

Chetan Gowda
fuente
5

Introducción de 101 palabras

Camel es un marco con una API consistente y un modelo de programación para integrar aplicaciones juntas. La API se basa en teorías en patrones de integración empresarial , es decir, un montón de patrones de diseño que tienden a usar mensajes. Proporciona implementaciones listas para usar de la mayoría de estos patrones, y además incluye más de 200 componentes diferentes que puede usar para comunicarse fácilmente con todo tipo de otros sistemas. Para usar Camel, primero escriba su lógica de negocios en POJO e implemente interfaces simples centradas en los mensajes. Luego use el DSL de Camel para crear "Rutas", que son conjuntos de reglas para pegar su aplicación.

Introducción extendida

En la superficie, la funcionalidad de Camel rivaliza con los productos tradicionales de Enterprise Service Bus. Por lo general, pensamos que una Ruta del Camello es un componente de "mediación" (también conocido como orquestación) que vive en el lado del servidor, pero debido a que es una biblioteca Java, es fácil de integrar y puede vivir en una aplicación del lado del cliente igual de bien y ayudarlo a integrarse con servicios punto a punto (también conocido como coreografía). Incluso puede tomar sus POJO que procesan los mensajes dentro de la ruta Camel y convertirlos fácilmente en sus propios procesos remotos de consumo, por ejemplo, si necesita escalar solo una pieza de forma independiente. Puede utilizar Camel para conectar rutas o procesadores a través de cualquier cantidad de protocolos / transporte remotos diferentes según sus necesidades. ¿Necesita un protocolo binario extremadamente eficiente y rápido, o uno que sea más legible y fácil de depurar? ¿Y si quisieras cambiar? Con Camel, esto suele ser tan fácil como cambiar una o dos líneas en su ruta y no cambiar ninguna lógica de negocios. O podría admitir ambos: puede ejecutar muchas rutas a la vez en un contexto de camello.

Realmente no necesita usar Camel para aplicaciones simples que van a vivir en un solo proceso o JVM, sería excesivo. Pero conceptualmente no es más difícil que el código que puede escribir usted mismo. Y si sus requisitos cambian, la separación de la lógica empresarial y el código de pegamento hace que sea más fácil de mantener con el tiempo. Una vez que aprenda la API Camel, es fácil de usar como una navaja suiza y aplicarla rápidamente en muchos contextos diferentes para reducir la cantidad de código personalizado que de lo contrario tendría que escribir. Puede aprender un sabor: el DSL de Java, por ejemplo, una API fluida que es fácil de encadenar, y recoger los otros sabores fácilmente.

Camel en general es ideal si estás tratando de hacer microservicios. Lo he encontrado invaluable para la arquitectura evolutiva, porque puedes posponer muchas de las decisiones difíciles, "fáciles de equivocar", sobre protocolos, transportes y otros problemas de integración de sistemas hasta que sepas más sobre el dominio de tu problema. Solo concéntrese en sus EIP y en la lógica comercial central y cambie a nuevas rutas con los componentes "correctos" a medida que aprende más.

cwash
fuente
4

Sí, esto probablemente sea 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 cuando desarrolle y necesite hacer varias transformaciones y conversiones de protocolo.

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

Souciance Eqdam Rashti
fuente
4

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 solo para crear un punto final API REST que a su vez llama a una API externa y envía la solicitud de vuelta

Spring 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 sus 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 junto con el servidor? Respuesta: - Se puede implementar en un contenedor como Tomcat o se puede implementar de forma independiente como un proceso de Java
  4. ¿Es un programa independiente? Respuesta: - Puede ser.

Espero eso ayude

Khader MA
fuente
3

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. Puede usar Java, Spring XML, Scala o Groovy.

Apache Camel se ejecuta en la máquina virtual Java (JVM). ... La funcionalidad principal de Apache Camel es su motor de enrutamiento. Asigna mensajes basados ​​en las rutas relacionadas. Una ruta contiene lógica de flujo e integración. Se implementa utilizando EIP y un DSL específico.

ingrese la descripción de la imagen aquí

Midhun Pottammal
fuente
1
Camel implement 40 pattern, en EIP: patrón de integración empresarial.
Jacob
2

Es como una tubería que conecta

From---->To

En el medio 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.

Es compatible y tiene implementación para todo tipo y tipo de procesamiento. Y para el mismo procesamiento, muchos enfoques porque 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 tipos de archivos movidos o copiados y también desde carpetas, servidores o colas.

-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

javalearner_heaven
fuente
0

Otro punto de vista (basado en temas matemáticos más fundamentales)

La plataforma informática más general es una [ https://en.wikipedia.org/wiki/Turing_machine]

Hay un problema con la máquina Turing. Todos los datos de entrada / salida permanecen dentro de la máquina de turing. En el mundo real hay fuentes de entrada y sumideros de salida externos a nuestra máquina Turing, y en general regidos por sistemas fuera de nuestro control. Es decir, esos sistemas externos enviarán / recibirán datos a voluntad en cualquier formato con cualquier programador de datos deseado.

Pregunta: ¿Cómo logramos hacer que las máquinas de turing independientes se comuniquen entre sí de la manera más general para que cada máquina de turing vea a sus pares como una fuente de datos de entrada o un sumidero de datos de salida?

Respuesta: Usando algo como camello, mula, BizTalk o cualquier otro ESB que abstraiga el manejo de datos entre completar máquinas de turing "físicas" (o software virtuales) distintas.

Earizon
fuente