JBoss Fuse - Apache Camel

Trong chương này, chúng ta sẽ thảo luận về Apache Camel là gì và cách nó định tuyến dữ liệu hiệu quả giữa các điểm cuối, cùng với một vài ví dụ.

Apache Camel là gì?

Apache Camel là một khung tích hợp mã nguồn mở được bắt đầu vào đầu năm 2007.

Đây là cách tiếp cận dựa trên EIP (Mô hình tích hợp doanh nghiệp) cung cấp một số triển khai các mẫu hình hộp có thể được sử dụng để giải quyết các vấn đề tích hợp doanh nghiệp. EIP không là gì khác ngoài các giải pháp đã được chứng minh cho các vấn đề được ghi nhận đầy đủ và lặp lại trong quá trình tích hợp doanh nghiệp.

Camel còn được gọi là công cụ định tuyến và dàn xếp vì nó định tuyến dữ liệu giữa các điểm cuối một cách hiệu quả, đồng thời chịu tải nặng như chuyển đổi định dạng dữ liệu, kết nối điểm cuối và nhiều hơn nữa.

Ví dụ cơ bản

Điều kiện tiên quyết để sử dụng Apache Camel là:

  • Java
  • Maven
  • Redhat JBoss Fuse 6.1-GA-379

Tạo khung cơ bản của Ứng dụng

mvn:archetype generate 
–DgroupId = com.tutorialpoint.app 
–DartifactId = camel-first-app 
–DarchetypeGroupId = org.apache.camel.archetypes
–DarchetypeArtifactId = camel-archetype-spring 
–DinteractiveMode = false -X

Điều này sẽ tạo ra cấu trúc thư mục sau.

Đây là khung cơ bản của ứng dụng Camel của chúng tôi đang được tạo.

Chỉnh sửa camel-context.xml

Biên tập camel-first-app → src → main → resources → META-INF\spring\camel-context.xml để khớp như bên dưới

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- Configures the Camel Context-->
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://camel.apache.org/schema/spring
   http://camel.apache.org/schema/spring/camel-spring.xsd">

   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <!-- here is a sample which processes the input file
         (leaving them in place - see the 'noop' flag) 
         then performs content based routing on the message using XPath -->
			
      <route>
         <from uri = "file:///d:/src/data?noop=false"/>
         <choice>
            <when>
               <xpath>/person/city = 'London'</xpath>
               <log message = "UK message"/>
               <to uri = "file:///d:/target/messages/uk"/>
            </when>
				
            <otherwise>
               <log message = "Other message"/>
               <to uri = "file:///d:/target/messages/others"/>
            </otherwise>
				
         </choice>
			
      </route>
   </camelContext>
</beans>

Chỉnh sửa pom.xml

Thêm mã sau vào bên trong <plugins> </plugins>

<plugin>
   <groupId>org.apache.felix</groupId>
   <artifactId>maven-bundle-plugin</artifactId>
   <version>2.3.4</version>
   <extensions>true</extensions>
	
   <configuration>
      <instructions>
         <Bundle-SymbolicName>
            ${project.artifactId}
         </Bundle-SymbolicName>
         <Import-Package>*</Import-Package>
      </instructions>
   </configuration>
	
</plugin>

Thay đổi loại bao bì từ jar → bundle.

<packaging>bundle</packaging>

Xây dựng dự án bằng lệnh sau:

mvn clean install

Cài đặt dự án vào cầu chì

Bắt đầu sử dụng cầu chì Fuse.bat/start.bat. Nếu bạn bắt đầu sử dụng Fusestart.bat, sử dụng client.batđể kết nối với cầu chì. Bạn sẽ nhận được giao diện người dùng như được hiển thị trong ảnh chụp màn hình sau.

Đây là CLI để truy cập các lệnh Karaf và Fuse.

install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT

Kiểm tra xem Dự án của bạn có đang chạy không

Bây giờ ứng dụng của bạn sẽ được cài đặt trong Fuse. Sao chép thư mục dữ liệu bên trongcamel-first-app và đặt nó vào D:/src/ và nó sẽ sao chép thông báo có city = London vào D:/target/merssages/uk.

Đặt tệp đầu vào vào D:/src/data

Input

Message1.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
   <city>London</city>
</person>

Message2.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "hiram">
   <firstName>Hiram</firstName>
   <lastName>Chirino</lastName>
   <city>Tampa</city>
</person>

Output

Trong D: / target / messages / uk

<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
   <city>London</city>
</person>

Trong D: / target / messages / others

<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "hiram">
   <firstName>Hiram</firstName>
   <lastName>Chirino</lastName>
   <city>Tampa</city>
</person>