Apache Camel - Giới thiệu
Hãy xem xét tình huống mà một cửa hàng tạp hóa trực tuyến lớn trong thị trấn của bạn, chẳng hạn như Bigbasket ở Ấn Độ mời bạn thiết kế một giải pháp CNTT cho họ. Giải pháp ổn định và có thể mở rộng sẽ giúp họ vượt qua các vấn đề bảo trì phần mềm mà họ đang gặp phải hiện nay. Cửa hàng trực tuyến này đã hoạt động kinh doanh trong thập kỷ qua. Cửa hàng chấp nhận các đơn đặt hàng trực tuyến cho các loại sản phẩm khác nhau từ khách hàng của họ và phân phối chúng cho các nhà cung cấp tương ứng. Ví dụ, giả sử bạn đặt một số xà phòng, dầu và sữa; ba mặt hàng này sẽ được phân phối cho ba nhà cung cấp tương ứng. Ba nhà cung cấp sau đó sẽ gửi nguồn cung cấp của họ đến một điểm phân phối chung, từ đó trung tâm giao hàng sẽ thực hiện toàn bộ đơn hàng. Bây giờ, chúng ta hãy xem xét vấn đề mà họ đang phải đối mặt ngày hôm nay.
Khi cửa hàng này bắt đầu kinh doanh, cửa hàng đang chấp nhận các đơn đặt hàng trong một tệp văn bản thuần túy được phân tách bằng dấu phẩy. Sau một thời gian, cửa hàng chuyển sang đặt hàng theo tin nhắn. Sau đó, một số nhà phát triển phần mềm đã đề xuất một vị trí đặt hàng dựa trên XML. Cuối cùng, cửa hàng thậm chí đã điều chỉnh giao diện dịch vụ web. Bây giờ, đây là vấn đề thực sự. Các đơn đặt hàng hiện có các định dạng khác nhau. Rõ ràng, mỗi khi công ty nâng cấp định dạng chấp nhận đơn hàng, họ không muốn phá vỡ giao diện đã triển khai trước đó để không gây ra sự nhầm lẫn trong tâm trí khách hàng.
Đồng thời, khi công việc kinh doanh tiếp tục phát triển, cửa hàng định kỳ bổ sung các nhà cung cấp mới vào các tiết mục của mình. Mỗi nhà cung cấp như vậy có giao thức riêng để chấp nhận đơn đặt hàng. Một lần nữa, chúng ta phải đối mặt với vấn đề tích hợp; kiến trúc ứng dụng của chúng tôi phải có khả năng mở rộng để đáp ứng các nhà cung cấp mới với cơ chế đặt hàng độc nhất của họ.
Toàn bộ tình huống được thể hiện trong hình sau:
Bây giờ, hãy để chúng tôi xem cách Apache Camel có thể giải cứu bạn để cung cấp kiến trúc giải pháp thanh lịch, có thể bảo trì, có thể mở rộng cho kịch bản được mô tả.
Trước khi tiến hành giải pháp, chúng ta cần đưa ra một giả định nhỏ. Đối với tất cả các cuộc thảo luận trong hướng dẫn này, chúng tôi sẽ giả định rằng các đơn đặt hàng trực tuyến được đặt ở định dạng XML. Định dạng điển hình cho tệp đơn đặt hàng mà chúng tôi sẽ sử dụng trong suốt các cuộc thảo luận của chúng tôi được hiển thị ở đây -
<?xml version = "1.0" encoding = "UTF-8"?>
<OrderID Order = "001">
<order product = "soaps">
<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>
</order>
<order product = "Oil">
<items>
<item>
<Brand>Saffola</Brand>
<Type>Gold</Type>
<Quantity>2</Quantity>
<Price>649</Price>
</item>
<item>
<Brand>Fortune</Brand>
<Type>Sunlite</Type>
<Quantity>1</Quantity>
<Price>525</Price>
</item>
</items>
</order>
<order product = "Milk">
<items>
<item>
<Product>Milk</Product>
<Brand>Amul</Brand>
<Type>Pure</Type>
<Quantity>2</Quantity>
<Price>60</Price>
</item>
</items>
</order>
</OrderID>
Chúng tôi sẽ sử dụng mẫu XML ở trên để minh họa các ví dụ về Camel trong hướng dẫn này.