Apache Camel es una biblioteca de motores de reglas muy práctica que se puede utilizar para procesar eventos e información de diferentes fuentes. Puede transmitir mensajes en diferentes protocolos como VM, HTTP, FTP, JMS e incluso en el sistema de archivos, y mantener su lógica operativa y la separación de la lógica de transmisión, lo que puede hacer que se centre más en el contenido del mensaje.
En este artículo, proporcionaré una demostración de entrada Java Languaga Apache Camel.
Primero cree un pom.xml de un proyecto Maven.
<. .org/2001/xmlschema -instance "xsi: schemalocation =" http://maven.apache.org/pom/4.0.0http://maven.apache.org/maven- v4_0.xsd "> <ModelsiSiInisiinisiInisiInisiinisInisInision"> 4.0 . Project.Build.SourceEncoding> UTF-8 </project.build.sourceEncoding> <Camel.version> 2.11.1 </camel.version> </propiies> ency> <proupid> org.apache.camel </groupid> </pper ArtifactId> Camel-core </artifactid> <versever> $ {Camel.version} </ververy> </pendency> <pendency> org.slf4j </proupid> <arttifactid> slf4j-simple </artifactid> <ververy> 1.7 1.7 1.7 .5 </versión> </pendency> </dependencias> </ject>Aquí solo usamos el paquete camel-core.jar, de hecho, proporciona muchos componentes prácticos que puede usar. A los efectos de los registros de registro, utilicé SLF4J-Simple como la implementación del registro de registro, para que podamos ver la salida de la consola.
A continuación, solo necesitamos construir una clase de enrutamiento. Las rutas se definen por cómo pasar el mensaje de un extremo al otro extremo. Crearemos archivos src/main/java/camelcoredemo/timerRouteBuilder.java, enviaremos un mensaje al procesador cada segundo e imprimirlo simplemente.
Paquete CamelCoremo; Desde ("Time: // timer1? Period = 1000") .process (nuevo procesador () {Public void Process (Exchange Msg) {log.info ("procesamiento {}", msg);}});}}Lo anterior es toda la necesidad de este ejemplo, y ahora compilar y ejecutar.
Bash> mvn compilebash> mvn exec: java -dexec.mainclass = org.apache.camel.main.main -dexec.args = '-r camelcoremorouteBuilder'
Tenga en cuenta que aquí no escribimos la entrada principal de la clase Java.
Controlar camelContext
Cuando se inicia el camello, creará un objeto CamelContext, que tiene mucha información sobre cómo ejecutar Camel, y también incluye la definición de ruta que creamos. Ahora, si desea obtener más control a través de CamelContext, entonces debe escribir su código principal. Estoy aquí un simple ejemplo.
Paquete CamelCoremo; Static void main (string [] args) lanza la excepción {new Timermain (). ); ;Se puede ver que hemos reutilizado la clase de TimRouteuDeBuilder existente en el método CreterouteBuilder (). Ahora nuestra clase principal ha controlado completamente cuando se crea, inicia, comenzó y detuvo CamelContext. El objeto de contexto (CamelContext) le permite controlar cómo configurar Camel en un nivel global, no en el nivel de ruta. Su enlace Javadoc proporciona todos los métodos de setter, y puede estudiar lo que puede hacer.
Tenga en cuenta que también necesitamos proporcionar una pequeña cantidad de código en nuestra categoría principal. En primer lugar, necesitamos lidiar con el problema del cierre elegante, por lo que agregamos una función de cierre de Java para llamar al método stop () del contexto. En segundo lugar, después de que el contexto ha comenzado, necesitamos agregar un bloque de subprocesos. Si no bloquea su hilo principal después del inicio, simplemente saldrá después de comenzar, y será inútil. Ejecutará Camel como un servicio (como un servidor) hasta que presione la tecla Ctrl+C para finalizar el proceso.
Mejorar la clase principal que comienza a lanzar CamelContext
Si no desea procesar el código de configuración de la clase principal tanto como el ejemplo anterior, simplemente puede heredar el org.apache. Al usar esta clase, no solo puede permitir que su contexto se establezca automáticamente, sino que también obtenga todas las características adicionales de la línea de comandos, como cuánto tiempo se ejecuta el proceso de control, habilita el seguimiento, carga una clase de ruta personalizada, etc.
Reconstruya el siguiente ejemplo, el código es el siguiente:
Paquete Caredemo; STACIS Void Main (String [] args) lanza la excepción {timermain2 main = new Timermain2 (); ;}} Ahora el código de Timermain2 es menor que antes, puede probarlo, debe ser el mismo que las características anteriores.
Bash> mvn compilebash> mvn exec: java -dexec.mainclass = camelcoremo.timermain2 -dexec.args = '-t'
Tenga en cuenta que después de dar la opción -t, el seguimiento de ruta se reservará. Use -h verá todas las opciones disponibles.
Agregue el frijol con el mecanismo de registro de Camel
En el ejemplo anterior de TimRouteBuilder, hemos creado un procesador anónimo en el código. Ahora, si desea armar algunos procesores diferentes, agregar un frijol para agregar un mecanismo de registro de camello reducirá mejor la confusión del código. Camel le permite usar el procesamiento como Bean en su espacio de registro, y luego solo necesita llamarlos como componentes de frijoles. El siguiente es mi código de reconstrucción:
Paquete Caredemo; Static void main (string [] args) lanza la excepción {TimerBeanSmain Main = New TimerBeanSmain (); ()); = 1000 ") .to (" Bean: ProcessByBean1 ") .to (" Bean: ProcessagainByBean2 "); ent procesador {Public void Process (Exchange Msg) {log.info (" Primer proceso {} ", msg);}} Class estática Bean2 Implementa el procesador {Public void Process (Exchange Msg) {log.info ("Sec Ond Process {}", MSG);}}}Ahora la clase de ruta es más concisa y clara, y al mismo tiempo, el código de procesamiento también se ha reconstruido en una clase independiente. Cuando necesita escribir una ruta muy complicada para lograr la lógica de negocios, este método puede ayudarlo a organizar y probar mejor su código. Le permite construir PoJO Bean que se pueda reutilizar como "LEGO". El espacio de registro de Camel también se puede utilizar para muchos otros usos.
El ejemplo de la ruta anterior está compuesto de SO Java DSL.
Espero que este artículo pueda ayudarlo a omitir la etapa de exploración del camello.