Apache Camel - Sử dụng với Spring
Bây giờ chúng ta sẽ tạo lại ứng dụng từ chương trước bằng Spring. Điều này sẽ cho chúng ta một ý tưởng về cách tạo định tuyến Camel trong XML chứ không phải DSL.
Tạo dự án mới
Tạo một cái mới Maven dự án và chỉ định những điều sau:
GroupId: BasketWithSpring
ArtifactId: BasketWithSpring
Chọn vị trí mặc định cho dự án của bạn hoặc nếu bạn muốn chỉ định thư mục mà bạn chọn.
Thêm phụ thuộc
Ngoài các phụ thuộc cốt lõi mà bạn đã sử dụng trong ứng dụng trước đó, bạn cần thêm một vài phụ thuộc nữa để sử dụng Spring. Các phụ thuộc được thêm vào trong pom.xml. Bây giờ, mở pom.xml và thêm các phụ thuộc sau:
<dependencies>
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.15.2</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.15.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<version>2.15.1</version>
</dependency>
</dependencies>
Tạo Java DSL cho mùa xuân
Bây giờ chúng ta hãy tạo một lớp Java mới có tên là DistributeOrderXML. Thêm mã sau vào nó -
public class DistributeOrderXML {
public static void main(String[] args) throws Exception {
ApplicationContext appContext = new ClassPathXmlApplicationContext(
"SpringRouteContext.xml");
CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);
try {
camelContext.start();
ProducerTemplate orderProducerTemplate = camelContext.createProducerTemplate();
InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
.getResource("order.xml").getFile());
orderProducerTemplate.sendBody("direct:DistributeOrderXML", orderInputStream);
} finally {
camelContext.stop();
}
}
}
bên trong main , trước tiên chúng ta tạo một phiên bản của ApplicationContext, là giao diện trung tâm trong ứng dụng Spring. Trong hàm tạo của nó, chúng tôi chỉ định tên của tệp XML có chứa thông tin định tuyến và lọc của chúng tôi.
ApplicationContext appContext = new ClassPathXmlApplicationContext(
"SpringRouteContext.xml");
Tiếp theo, chúng tôi tạo CamelContext chỉ định ở trên được tạo ApplicationContext trong tham số của nó.
CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);
Tại thời điểm này, định tuyến và lọc của chúng tôi đã được thiết lập. Do đó, chúng tôi bắt đầuCamelContext sử dụng nó startphương pháp. Như trong trường hợp trước, chúng tôi xác định Điểm cuối để tải tệp order.xml và bắt đầu xử lý. Bây giờ, chúng ta hãy hiểu cách định tuyến trong XML.
Tạo bối cảnh ứng dụng
Thêm tệp XML mới vào dự án và gọi nó SpringRouteContext.xml. Cắt-n-dán các nội dung sau vào tệp này.
<?xml version = "1.0" encoding = "UTF-8"?>
<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">
<route>
<from uri = "direct:DistributeOrderXML"/>
<log message = "Split by Distribute Order"/>
<split>
<xpath>//order[@product = 'Oil']/items</xpath>
<to uri = "file:src/main/resources/order/"/>
<to uri = "stream:out"/>
</split>
</route>
</camelContext>
</beans>
Ở đây, chúng tôi xác định truy vấn xpath như sau, lưu ý rằng bây giờ chúng tôi chọn tất cả các đơn đặt hàng cho “dầu”.
<xpath>//order[@product = 'Oil']/items</xpath>
Các điểm cuối đầu ra là nhiều. Điểm cuối đầu tiên chỉ địnhorder và thư mục thứ hai chỉ định bảng điều khiển.
<to uri = "file:src/main/resources/order/"/>
<to uri = "stream:out"/>
Chạy ứng dụng.
Kết quả kiểm tra
Khi bạn chạy ứng dụng, bạn sẽ thấy kết quả sau trên màn hình.
<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>
Kiểm tra orderthư mục trong đường dẫn do bạn chỉ định. Bạn sẽ tìm thấy một tệp mới được tạo có chứa mã XML ở trên.
Phần kết luận
Camel cung cấp một khuôn khổ sẵn sàng sử dụng để triển khai các EIP để dễ dàng thực hiện các dự án tích hợp của bạn. Nó hỗ trợ mã hóa bằng các ngôn ngữ dành riêng cho miền và sử dụng cả XML.