12 Ağustos 2020 Çarşamba

Camel DirectComponent Sınıfı

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
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 {

  @Override
  public void configure() throws Exception {

    from("direct:sampleInput")
      .log("Received Message is ${body} and headers are ${headers}")
      .to("file:sampleOutput?fileName=output.txt")
    .end();
  }
}
Kullanım Örnekleri

Ö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