Giriş
DirectComponent bir çok farklı kanalın birleşme noktası gibi düşünülebilir. Farklı kanallardan gelen girdiler, DirectComponent'e gönderilir. DirectComponent'i dinleyen bir başka kanal da veriyi örneğin bir kuyruğa veya veri tabanına yazar. Açıklaması şöyle
DirectComponent bir çok farklı kanalın birleşme noktası gibi düşünülebilir. Farklı kanallardan gelen girdiler, DirectComponent'e gönderilir. DirectComponent'i dinleyen bir başka kanal da veriyi örneğin bir kuyruğa veya veri tabanına yazar. Açıklaması şöyle
The direct: component provides direct, synchronous invocation of any consumers when a producer sends a message exchange.
Bu bileşen bir thread pool kullanmaz. Açıklaması şöyle
Another difference is Direct component doesn't has any thread pool, the direct consumer process method is invoked by the calling thread of direct producer.
DirecktComponent'e normalde sadece to() ile consumer'lar bağlanır. DirectComponent'i besleyen/tetikleyen kodlar genelde başka yerdedir
Örnek - Log + Consumer
Şöyle yaparız
import org.apache.camel.builder.RouteBuilder;public class SampleDirectRoute extends RouteBuilder {@Overridepublic void configure() throws Exception {from("direct:sampleInput").log("Received Message is ${body} and headers are ${headers}").to("file:sampleOutput?fileName=output.txt").end();}}
Örnek
- Bir SpringBoot RestController DirectComponent'a select çağrısı gönderir. DirectComponent bir sql cümlesi oluşturur ve JDBCComponent'e gönderir ve cevabı döner.
- SpringBoot RestController DirectComponent'a insert çağrısı gönderir. DirectComponent bir sql cümlesi oluşturur ve JDBCComponent'e gönderir ve cevabı döner.
Örnek
Şöyle yaparız. Activemq'dan okuma yapıp, OrderServer.validate() metoduna gönderir. Bu metod da processOrder kanalına gönderir. Bu kanalı dinleyen OrderService.process() çıktısını Activemq'ya gönderir.
from("activemq:queue:order.in")
.to("bean:orderServer?method=validate")
.to("direct:processOrder");
from("direct:processOrder")
.to("bean:orderService?method=process")
.to("activemq:queue:order.out");
ÖrnekŞöyle yaparız.
// Three endpoints to one "main" route.
from("activemq:queue:order.in")
.to("direct:processOrder");
from("file:some/file/path")
.to("direct:processOrder");
from("jetty:http://0.0.0.0/order/in")
.to("direct:processOrder");
from("direct:processOrder")
.to("bean:orderService?method=process")
.to("activemq:queue:order.out");
marshal metoduŞöyle yaparız
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonDataFormat;
import org.springframework.stereotype.Component;
import com.javainuse.model.Employee;
@Component
public class RabbitMQRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
JacksonDataFormat jsonDataFormat = new JacksonDataFormat(Employee.class);
from("direct:startQueuePoint").id("idOfQueueHere").marshal(jsonDataFormat)
.to("rabbitmq://localhost:5672/javainuse.exchange?queue=javainuse.queue
&autoDelete=false")
.end();
}
}
Hiç yorum yok:
Yorum Gönder