DEV Community

Cover image for GETTING CAMEL - CAMEL in Action
Chanh Bùi
Chanh Bùi

Posted on

GETTING CAMEL - CAMEL in Action

Camel được định nghĩa, đơn giản là một framework để tích hợp các hệ thống khác nhau thành một hệ thống phức tạp hơn. Ra đời ở đầu năm 2007 và giờ đã phát triển thành một framework mạnh mẽ, được cấp phép với Apache 2 license và có một cộng đồng hỡ trợ mạnh mẽ.
Camel tập trung vào sự đơn giản khi tích hợp các hệ thống, với main point là Routing engine. Để hiểu rõ hơn, có thể tham khảo ở trang chủ Camel: https://camel.apache.org/
Tại bài viết này, mình xin đưa ra một cái nhìn tổng quan và đơn giản nhất khi tiếp cận Camel.
Bài toán: Xây dựng một hệ thống tích hợp hỗ trợ việc chuyển đổi dữ liệu từ data/inbox sang data/outbox.
Alt Text
Với yêu cầu đơn giản như trên, chúng ta có thể sử dụng low-level java APIs về File để chuyển đổi data như sau (khoảng 37 lines code):
Alt Text
Đây là cách làm đơn giản nhất để impletation bài toán trên, tuy nhiên có một vài điểm chưa thật sự thỏa mãn ở đây. Ví dụ, khi ở thư mục data/inbox có thêm file mới, việc cần làm ở đây là chúng ta phải cài đặt thòi điểm loading lại folder, kiểm tra xem file đã sẵn sàng để đọc chưa, sau đó mới thực hiện 37 lines code ở trên. Bài toán đơn giản lúc đầu, dần trở nên phức tạp hơn.

Việc loading folder, kiểm tra file đã sẵn sàng để đọc chưa,... như ví dụ ở trên nói riêng, và các nghiệp vụ của hệ thống cần tích hợp nói chung, chúng đã được implementation trước đó rồi. Chúng ta không nên thực hiện lại việc này, khi triển khai thích hợp các hệ thống. Đừng sáng tạo lại chiếc bánh xe! Giờ chúng ta hãy xem, việc đó được triển khai như thế nào khi sử dụng Apache Camel.
Alt Text
Mỗi một ứng dụng Camel sử dụng một CamelContext để kiểm soát việc bắt đầu/kết thúc một tiến trình tích hợp. Hãy chú ý và route(1).
Routes trong Camel định nghĩa các luồng đi của tiến trình tích hợp. Ở ví dụ này, route có thể hiểu là: Phát đi một message "from file" với địa chỉ là "data/inbox" có lựa chọn thuộc tính "noop". Thuộc tính "noop" này cho biết, Camel sẽ giữ lại tài nguyên file này. Nếu không sử dụng hoặc thuộc tính "noop = false" thì tài nguyên file sẽ bị xóa.
Hầu hết mọi người chưa từng tiếp cận với Camel, cũng đều hiểu được ý nghĩa của route này thực hiện điều gì. Đó là cái hay của Camel. Và hơn nữa, thay vì Sáng tạo lại chiếc bánh xe với 37 lines code, ở đây, chúng ta chỉ cần implementation với 2 lines code để tích hợp 2 hệ thống với nhau, giữ nguyên logic và business của riêng chúng.
Source code của example trên hiện có ở github: https://github.com/camelinaction/camelinaction2

Phía trên là cách tiếp cận đơn giản về Apache Camel để tích hợp hệ thống. Ở bài tiếp theo, mình sẽ nói kỹ hơn về các component và sâu hơn về cơ chế của Camel.
Bài viết có tham khảo nguồn từ: Camel in Action (Second Edition)
Hết.

Top comments (2)

Collapse
 
thuannd97 profile image
thuannd

Camel so với Spring Integration thì sao aj?

Collapse
 
ethan870093 profile image
Chanh Bùi

So sánh thì mình chưa đủ kiến thức để diễn giải. Nhưng mỗi thằng có 1 hệ sinh thái khác nhau. Camel thì là core rồi. Nhiều chuyên gia thích sử dụng core hơn là sử dụng spring...