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");