Apache Camel - ส่วนประกอบ

อูฐมีส่วนประกอบที่สร้างไว้ล่วงหน้าหลายอย่าง

ในบทนี้เราจะพูดถึงส่วนประกอบที่สำคัญบางประการจากไฟล์ camel-core โมดูล.

ถั่ว

Beanส่วนประกอบผูกถั่วกับการแลกเปลี่ยนข้อความอูฐ URI ในการสร้าง Endpoint ระบุเป็นbean:beanID, ที่ไหน beanID คือชื่อของถั่วตามที่ระบุในไฟล์ 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");
   }
});

สังเกตว่าปลายทางถูกระบุโดยใช้ไฟล์ bean:มาตรการ. คุณสามารถเลือกที่จะระบุวิธีการ bean ที่จะเรียก; ในกรณีนี้วิธีการที่เรียกว่าplaceOrderจะถูกเรียกใช้ขณะประเมินนิพจน์ปลายทาง MilkOrder เป็นชื่อ JNDI ของไฟล์ MilkOrderProcessorJavabean ตามที่ลงทะเบียนในสองบรรทัดแรกของข้อมูลโค้ด ความหมายของMilkOrderProcessor ตัวเองถูกละไว้ที่นี่เพื่อความกะทัดรัด

โดยตรง

คุณต้องสังเกตเห็นการใช้ Directในตัวอย่างก่อนหน้านี้ของเรา ในการส่งคำสั่งซื้อไปยังผู้จำหน่ายน้ำมันเราใช้direct:oilในข้อกำหนดปลายทาง การใช้Directคอมโพเนนต์ช่วยให้คุณสามารถเรียกใช้ปลายทางได้พร้อมกัน ตัวอย่างโค้ดสองรายการต่อไปนี้จากตัวอย่างก่อนหน้านี้แสดงให้เห็นถึงการใช้งานDirect -

.when(header("order").isEqualTo("oil"))
   .to("direct:oil")

และ,

from("direct:DistributeOrderDSL")
   .process(myProcessor);

ไฟล์

Fileคอมโพเนนต์ให้การเข้าถึงระบบไฟล์บนเครื่องของคุณ เมื่อใช้ส่วนประกอบนี้คุณจะสามารถบันทึกข้อความจากส่วนประกอบอื่น ๆ ลงในดิสก์ภายในเครื่องได้ นอกจากนี้ยังอนุญาตให้คอมโพเนนต์ Camel อื่น ๆ ประมวลผลไฟล์ภายในเครื่อง คุณสามารถใช้อย่างใดอย่างหนึ่งfile:directoryName[?options] หรือ file://directoryName[?options]เป็นรูปแบบ URI ขณะใช้คอมโพเนนต์ไฟล์ ก่อนหน้านี้คุณได้เห็นการใช้ส่วนประกอบนี้ -

from ("file:/order").to("jms:orderQueue");

โปรดทราบว่าไฟล์ Fileคอมโพเนนต์โดยค่าเริ่มต้นใช้ชื่อไดเร็กทอรี ดังนั้นเนื้อหาของไดเร็กทอรีคำสั่งจะถูกนำมาเป็นเนื้อหาอินพุต เพื่อระบุไฟล์เฉพาะในไฟล์order ไดเรกทอรีคุณจะใช้คำสั่งต่อไปนี้ -

from ("file:/order?fileName = order.xml").to("jms:orderQueue");

บันทึก

Logคอมโพเนนต์ช่วยให้คุณสามารถบันทึกข้อความไปยังกลไกการบันทึกพื้นฐาน Camel ใช้ Simple Logging Facade สำหรับ Java (SLF4J) เป็นนามธรรมสำหรับเฟรมเวิร์กการบันทึกต่างๆ คุณอาจใช้java.util.logging, logback, log4jสำหรับการบันทึก ข้อมูลโค้ดนี้แสดงให้เห็นถึงการใช้ไฟล์Log ส่วนประกอบ -

from("direct:DistributeOrderDSL")
   .to("bean:MilkOrder?method = placeOrder")
   .to("log:com.example.com?level = INFO&showBody = true");

SEDA

SEDA คอมโพเนนต์ช่วยให้คุณสามารถโทรหาจุดสิ้นสุดอื่นแบบอะซิงโครนัสได้ CamelContext. หากคุณต้องการโทรข้ามอินสแตนซ์ CamelContext คุณต้องใช้VMส่วนประกอบ. การใช้ SEDA แสดงไว้ที่นี่ -

from("direct:DistributeOrderDSL")
// send it to the seda queue that is async
   .to("seda:nextOrder")

ในเส้นทางนี้เราจะกำหนดเส้นทางคำสั่งซื้อไปที่ nextOrderคิวแบบอะซิงโครนัส ลูกค้าที่สมัครรับคิวนี้จะรับข้อความจากคิวนี้

จับเวลา

Timerคอมโพเนนต์ใช้สำหรับการส่งข้อความในช่วงเวลาปกติดังนั้นจึงมีประโยชน์มากในขณะทดสอบแอปพลิเคชัน Camel ข้อมูลโค้ดที่นี่จะส่งข้อความทดสอบไปยังคอนโซลทุกๆสองวินาที -

from("timer://testTimer?period = 2000")
   .setBody()
   .simple("This is a test message ${header.timer}")
      .to("stream:out");