Apache Camel - Các thành phần
Camel cung cấp một số thành phần được xây dựng sẵn.
Trong chương này, chúng tôi sẽ thảo luận một số thành phần quan trọng từ camel-core mô-đun.
hạt đậu
Các Beanthành phần liên kết đậu với trao đổi tin nhắn Camel. URI để tạo một Điểm cuối được chỉ định làbean:beanID, Ở đâu beanID là tên của hạt đậu như được chỉ định trong 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");
}
});
Lưu ý cách điểm cuối được chỉ định bằng cách sử dụng bean:giao thức. Bạn có thể tùy ý chỉ định phương thức bean sẽ được gọi; trong trường hợp này, phương thức được gọi làplaceOrdersẽ được gọi trong khi đánh giá biểu thức Điểm cuối. CácMilkOrder là một tên JNDI cho MilkOrderProcessorJavabean như đã đăng ký trong hai dòng đầu tiên của đoạn mã. Định nghĩa củaMilkOrderProcessor bản thân nó được bỏ qua ở đây cho ngắn gọn.
Thẳng thắn
Bạn hẳn đã nhận thấy việc sử dụng Directtrong các ví dụ trước của chúng tôi. Để gửi đơn đặt hàng đến một nhà cung cấp dầu, chúng tôi đã sử dụngdirect:oiltrong đặc tả Điểm cuối. Việc sử dụngDirectthành phần cho phép bạn gọi đồng bộ một điểm cuối. Hai đoạn mã sau đây từ các ví dụ trước của chúng tôi minh họa việc sử dụngDirect -
.when(header("order").isEqualTo("oil"))
.to("direct:oil")
Và,
from("direct:DistributeOrderDSL")
.process(myProcessor);
Tập tin
Các Filethành phần cung cấp quyền truy cập vào hệ thống tệp trên máy của bạn. Sử dụng thành phần này, bạn sẽ có thể lưu tin nhắn từ các thành phần khác vào đĩa cục bộ. Ngoài ra, nó cho phép các thành phần Camel khác xử lý các tệp cục bộ. Bạn có thể sử dụng một trong haifile:directoryName[?options] hoặc là file://directoryName[?options]dưới dạng định dạng URI trong khi sử dụng thành phần Tệp. Trước đó bạn đã thấy việc sử dụng thành phần này -
from ("file:/order").to("jms:orderQueue");
Lưu ý rằng Filethành phần mặc định lấy tên thư mục. Do đó, nội dung của thư mục đặt hàng sẽ được lấy làm nội dung đầu vào. Để chỉ định một tệp cụ thể trongorder thư mục, bạn sẽ sử dụng câu lệnh sau:
from ("file:/order?fileName = order.xml").to("jms:orderQueue");
Nhật ký
Các Logthành phần cho phép bạn đăng nhập các thông báo vào cơ chế ghi nhật ký cơ bản. Camel sử dụng Simple Logging Facade cho Java (SLF4J) như một phần trừu tượng cho các khung ghi nhật ký khác nhau. Bạn có thể sử dụngjava.util.logging, logback, log4jđể ghi nhật ký. Đoạn mã này minh họa việc sử dụngLog thành phần -
from("direct:DistributeOrderDSL")
.to("bean:MilkOrder?method = placeOrder")
.to("log:com.example.com?level = INFO&showBody = true");
SEDA
Các SEDA thành phần cho phép bạn gọi bất đồng bộ một điểm cuối khác trong cùng một CamelContext. Nếu bạn muốn gọi trên các phiên bản CamelContext, bạn cần sử dụngVMthành phần. Việc sử dụng SEDA được minh họa ở đây -
from("direct:DistributeOrderDSL")
// send it to the seda queue that is async
.to("seda:nextOrder")
Trong lộ trình này, chúng tôi chỉ định tuyến các đơn đặt hàng đến nextOrderhàng đợi không đồng bộ. Khách hàng đã đăng ký hàng đợi này sẽ nhận các tin nhắn từ hàng đợi này.
Hẹn giờ
Các Timerthành phần được sử dụng để gửi tin nhắn đều đặn và do đó có thể rất hữu ích trong khi thử nghiệm các ứng dụng Camel. Đoạn mã ở đây sẽ kích hoạt một thông báo thử nghiệm tới bảng điều khiển cứ sau hai giây -
from("timer://testTimer?period = 2000")
.setBody()
.simple("This is a test message ${header.timer}")
.to("stream:out");