Apache Camel - Wprowadzenie
Rozważ sytuację, w której duży internetowy sklep spożywczy w Twoim mieście, taki jak Bigbasket w Indiach, zaprasza Cię do zaprojektowania dla niego rozwiązania informatycznego. Stabilne i skalowalne rozwiązanie pomoże im przezwyciężyć problemy związane z konserwacją oprogramowania, z którymi borykają się obecnie. Ten sklep internetowy działa od dziesięciu lat. Sklep przyjmuje zamówienia online na różne kategorie produktów od swoich klientów i rozsyła je do odpowiednich dostawców. Na przykład załóżmy, że zamawiasz mydła, olej i mleko; te trzy elementy zostaną przekazane trzem odpowiednim dostawcom. Trzej dostawcy wyślą następnie swoje dostawy do wspólnego punktu dystrybucji, skąd całe zamówienie zostanie zrealizowane przez centrum dostaw. Przyjrzyjmy się teraz problemowi, przed którym stoją dzisiaj.
Kiedy ten sklep rozpoczynał swoją działalność, przyjmował zamówienia w postaci zwykłego pliku tekstowego oddzielonego przecinkami. Z biegiem czasu sklep przeszedł na składanie zamówień w oparciu o wiadomości. Później jakiś programista zasugerował składanie zamówień w oparciu o XML. Ostatecznie sklep dostosował nawet interfejs usługi sieciowej. A teraz prawdziwy problem. Zamówienia są teraz w różnych formatach. Oczywiście za każdym razem, gdy firma aktualizowała format akceptacji zamówienia, nie chciała zrywać wcześniej wdrożonego interfejsu, aby nie wprowadzać nieporozumień w świadomości klienta.
Równocześnie wraz z rozwojem biznesu sklep cyklicznie poszerzał swój repertuar. Każdy taki dostawca miał własny protokół przyjmowania zamówień. Po raz kolejny mamy do czynienia z problemem integracji; Nasza architektura aplikacji musi być skalowalna, aby umożliwić nowym dostawcom korzystanie z ich unikalnego mechanizmu składania zamówień.
Całą sytuację przedstawia poniższy rysunek -
Zobaczmy teraz, jak Apache Camel może przyjść Ci z pomocą, aby zapewnić elegancką, łatwą w utrzymaniu i skalowalną architekturę rozwiązania dla opisanego scenariusza.
Zanim przejdziemy do rozwiązania, musimy zrobić małe założenie. We wszystkich dyskusjach w tym samouczku założymy, że zamówienia online są składane w formacie XML. Typowy format pliku zamówienia, którego będziemy używać podczas naszych dyskusji, jest pokazany tutaj -
<?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>
Będziemy używać powyższego szablonu XML, aby zilustrować przykłady Camel w tym samouczku.