Apache Camel - Componenti
Camel fornisce diversi componenti predefiniti.
In questo capitolo, discuteremo alcuni importanti componenti di camel-core modulo.
Fagiolo
Il Beanil componente lega i bean agli scambi di messaggi Camel. L'URI per creare un endpoint è specificato comebean:beanID, dove beanID è il nome del bean come specificato in Registry.
JndiContext jndiContext = new JndiContext();
jndiContext.bind("MilkOrder", new MilkOrderProcessor());
CamelContext camelContext = new DefaultCamelContext(jndiContext);
camelContext.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:bigBasket")
.to("bean:MilkOrder?method=placeOrder");
}
});
Nota come viene specificato l'endpoint utilizzando il bean:protocollo. Opzionalmente è possibile specificare il metodo bean che deve essere invocato; in questo caso, il metodo chiamatoplaceOrderverrà richiamato durante la valutazione dell'espressione Endpoint. IlMilkOrder è un nome JNDI per MilkOrderProcessorJavabean come registrato nelle prime due righe dello snippet di codice. La definizione diMilkOrderProcessor stesso è qui omesso per brevità.
Diretto
Avrai notato l'uso di Directnei nostri esempi precedenti. Per inviare un ordine a un venditore di petrolio, abbiamo utilizzatodirect:oilnella specifica Endpoint. L'impiego diDirectconsente di richiamare in modo sincrono un endpoint. I seguenti due frammenti di codice dei nostri esempi precedenti illustrano l'uso diDirect -
.when(header("order").isEqualTo("oil"))
.to("direct:oil")
E,
from("direct:DistributeOrderDSL")
.process(myProcessor);
File
Il Filecomponente fornisce l'accesso al file system sulla macchina. Utilizzando questo componente, sarai in grado di salvare i messaggi di altri componenti su un disco locale. Inoltre, consente ad altri componenti Camel di elaborare i file locali. Puoi usare entrambifile:directoryName[?options] o file://directoryName[?options]come formato URI durante l'utilizzo del componente File. Hai già visto l'uso di questo componente:
from ("file:/order").to("jms:orderQueue");
Nota che il Fileil componente per impostazione predefinita prende il nome della directory. Pertanto, il contenuto della directory dell'ordine verrà considerato come contenuto di input. Per specificare un particolare file nel fileorder directory, utilizzerai la seguente dichiarazione:
from ("file:/order?fileName = order.xml").to("jms:orderQueue");
Log
Il Logcomponente consente di registrare i messaggi nel meccanismo di registrazione sottostante. Camel utilizza Simple Logging Facade for Java (SLF4J) come astrazione per vari framework di registrazione. Puoi usarejava.util.logging, logback, log4jper la registrazione. Questo frammento di codice illustra l'uso diLog componente -
from("direct:DistributeOrderDSL")
.to("bean:MilkOrder?method = placeOrder")
.to("log:com.example.com?level = INFO&showBody = true");
SEDA
Il SEDA component ti consente di chiamare in modo asincrono un altro endpoint nello stesso CamelContext. Se vuoi chiamare attraverso le istanze di CamelContext, devi usareVMcomponente. L'utilizzo di SEDA è illustrato qui -
from("direct:DistributeOrderDSL")
// send it to the seda queue that is async
.to("seda:nextOrder")
In questo percorso, indirizzeremo semplicemente gli ordini a nextOrdercoda asincrona. Un client che si è iscritto a questa coda raccoglierà i messaggi da questa coda.
Timer
Il Timerviene utilizzato per inviare messaggi a intervalli regolari e può quindi essere molto utile durante il test delle applicazioni Camel. Lo snippet di codice qui invia un messaggio di prova alla console ogni due secondi:
from("timer://testTimer?period = 2000")
.setBody()
.simple("This is a test message ${header.timer}")
.to("stream:out");