Apache Camel - Dự án
Chúng tôi sẽ sử dụng Maven để xây dựng một dự án Camel. Mặc dù, chúng tôi ưu tiên sử dụng IntelliJ IDE để phát triển. Bạn có thể sử dụng bất kỳ IDE nào mà bạn chọn cho dự án này.
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: Basket
ArtifactId: Basket
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
Bạn cần thêm một số phụ thuộc để sử dụng Camel. Các phụ thuộc được thêm vàopom.xml. Vì vậy, hãy mở pom.xml và thêm hai phần phụ thuộc sau:
<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- Chúng tôi cần các phụ thuộc tối thiểu cho ứng dụng của mình. Khi bạn sử dụng nhiều thành phần Camel hơn từ các thư viện của nó, bạn sẽ cần thêm các phần phụ thuộc tương ứng vào tệp pom.xml này.
Tạo Java DSL
Tiếp theo, bạn sẽ viết mã lọc và định tuyến của mình trong một Java DSL. Tạo một lớp Java mới được gọi làDistributeOrderDSL. Thêm mã sau vào nó -
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();
}
}
}
bên trong main phương pháp, trước tiên chúng tôi tạo CamelContext bằng cách khởi tạo một triển khai mặc định được cung cấp trong DefaultCamelContext lớp học.
CamelContext context = new DefaultCamelContext();
Tiếp theo, chúng tôi thêm một tuyến đường bằng cách tạo một RouteBuilder ví dụ -
context.addRoutes(new RouteBuilder() {
Chúng tôi ghi đè configure phương pháp để thêm một tuyến đường từ một URI trực tiếp DistributeOrderDSLvào bảng điều khiển hệ thống. Chúng tôi cung cấp một số bộ lọc bằng cách sử dụng truy vấn xpath.
public void configure() throws Exception {
from("direct:DistributeOrderDSL")
.split(xpath("//order[@product = 'soaps']/items")).to("stream:out");
// .to("file:src/main/resources/order/");
}
Sau khi thêm tuyến đường, chúng tôi bắt đầu ngữ cảnh -
context.start();
Tiếp theo, chúng tôi thêm mã để tạo URI trực tiếp của chúng tôi - DistributeOrderDSL.
ProducerTemplate orderProducerTemplate = context.createProducerTemplate();
InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
.getResource("order.xml").getFile());
Cuối cùng, chúng tôi bắt đầu xử lý -
orderProducerTemplate.sendBody("direct:DistributeOrderDSL", orderInputStream);
Bây giờ, khi mã Java DSL của bạn đã hoàn thành, điều duy nhất còn lại trước khi kiểm tra ứng dụng là thêm order.xmltập tin vào dự án của bạn. Bạn có thể sử dụng XML mẫu được hiển thị trong chương Giới thiệu cho mục đích này.
Kết quả kiểm tra
Khi bạn chạy ứng dụng, bạn sẽ thấy kết quả sau:
<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>
Lưu ý rằng chỉ có đơn đặt hàng cho Xà phòng được liệt kê ở đây. Nếu bạn muốn lưu trữ nó vào một tệp cục bộ, chỉ cần nhận xétstream.out dòng và bỏ ghi chú dòng sau trong configure phương pháp -
// .to("file:src/main/resources/order/");
Trong phần tiếp theo, chúng ta sẽ học cách sử dụng Camel với Spring.