Respuestas:
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.
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.
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?
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:
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 :-)
Camel envía mensajes de A a B:
¿Por qué todo un marco para esto? Bueno, y si tienes:
ftp
, http
, jms
, etc.)Entonces ahora necesitas:
Camel te ofrece lo anterior (y más) fuera de la caja:
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!)
Un diagrama es mejor que miles de descripciones. Este diagrama ilustra la arquitectura de Camel.
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 ...
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
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 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 ".
¿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.
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.
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.
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.
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
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.
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.
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.
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.
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á.
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
Espero eso ayude
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.
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
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.