Apache Camel - โครงการ

เราจะใช้ Maven เพื่อสร้างโครงการ Camel แม้ว่าเราควรใช้ IntelliJ IDE ในการพัฒนามากกว่า คุณสามารถใช้ IDE ใดก็ได้ที่คุณเลือกสำหรับโครงการนี้

การสร้างโครงการใหม่

สร้างไฟล์ Maven โครงการและระบุสิ่งต่อไปนี้ -

GroupId: Basket
ArtifactId: Basket

เลือกตำแหน่งเริ่มต้นสำหรับโครงการของคุณหรือหากคุณต้องการระบุไดเร็กทอรีที่คุณต้องการ

การเพิ่มการอ้างอิง

คุณต้องเพิ่มการอ้างอิงเล็กน้อยเพื่อใช้ Camel การอ้างอิงจะถูกเพิ่มเข้ามาpom.xml. ดังนั้นเปิด pom.xml และเพิ่มการอ้างอิงสองรายการต่อไปนี้ -

<dependencies>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-core</artifactId>
      <version>2.20.0</version>
   </dependency>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-stream</artifactId>
      <version>2.20.0</version>
   </dependency>
</dependencies>

Note- เราต้องการการอ้างอิงขั้นต่ำสำหรับแอปพลิเคชันของเรา เมื่อคุณใช้ส่วนประกอบ Camel จากไลบรารีมากขึ้นคุณจะต้องเพิ่มการอ้างอิงที่เกี่ยวข้องในไฟล์ pom.xml นี้

การสร้าง Java DSL

จากนั้นคุณจะเขียนโค้ดการกรองและการกำหนดเส้นทางของคุณใน Java DSL สร้างคลาส Java ใหม่ที่เรียกว่าDistributeOrderDSL. เพิ่มรหัสต่อไปนี้ -

public class DistributeOrderDSL {
   public static void main(String[] args) throws Exception {
      CamelContext context = new DefaultCamelContext();
      try {
         context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
               from("direct:DistributeOrderDSL")
                  .split(xpath("//order[@product='soaps']/items")).to("stream:out");
               
               // .to("file:src/main/resources/order/");
            }
         });
         context.start();
         ProducerTemplate orderProducerTemplate = context.createProducerTemplate();
         InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
            .getResource("order.xml").getFile());
         orderProducerTemplate.sendBody("direct:DistributeOrderDSL", orderInputStream);
      } finally {
         context.stop();
      }
   }
}

ใน main วิธีแรกเราสร้าง CamelContext โดยการสร้างอินสแตนซ์การใช้งานเริ่มต้นที่มีให้ใน DefaultCamelContext ชั้นเรียน

CamelContext context = new DefaultCamelContext();

ต่อไปเราจะเพิ่มเส้นทางโดยการสร้างแบบไม่ระบุตัวตน RouteBuilder อินสแตนซ์ -

context.addRoutes(new RouteBuilder() {

เราลบล้างไฟล์ configure วิธีการเพิ่มเส้นทางจาก URI โดยตรง DistributeOrderDSLไปยังคอนโซลระบบ เราจัดเตรียมการกรองบางอย่างโดยใช้แบบสอบถาม xpath

public void configure() throws Exception {
   from("direct:DistributeOrderDSL")
      .split(xpath("//order[@product = 'soaps']/items")).to("stream:out");
   // .to("file:src/main/resources/order/");
}

หลังจากเพิ่มเส้นทางเราเริ่มบริบท -

context.start();

ต่อไปเราจะเพิ่มรหัสสำหรับสร้าง URI โดยตรงของเรา - DistributeOrderDSL.

ProducerTemplate orderProducerTemplate = context.createProducerTemplate();
InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
   .getResource("order.xml").getFile());

ในที่สุดเราก็เริ่มการประมวลผล -

orderProducerTemplate.sendBody("direct:DistributeOrderDSL", orderInputStream);

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

ผลการทดสอบ

เมื่อคุณเรียกใช้แอปพลิเคชันคุณจะเห็นผลลัพธ์ต่อไปนี้ -

<items>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Original</Type>
      <Quantity>4</Quantity>
      <Price>25</Price>
   </item>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Lime</Type>
      <Quantity>6</Quantity>
      <Price>30</Price>
   </item>
</items>

โปรดทราบว่าเฉพาะคำสั่งซื้อสบู่เท่านั้นที่ระบุไว้ที่นี่ หากคุณต้องการจัดเก็บสิ่งนี้ลงในไฟล์ในเครื่องเพียงแค่แสดงความคิดเห็นที่ไฟล์stream.out บรรทัดและยกเลิกการใส่ข้อคิดเห็นบรรทัดต่อไปนี้ในไฟล์ configure วิธีการ -

// .to("file:src/main/resources/order/");

ในส่วนต่อไปเราจะเรียนรู้วิธีใช้ Camel กับ Spring