Рассмотрим ситуацию, когда крупный онлайн-магазин в вашем городе, такой как Bigbasket в Индии, предлагает вам разработать для них ИТ-решение. Стабильное и масштабируемое решение поможет им преодолеть проблемы обслуживания программного обеспечения, с которыми они сталкиваются сегодня. Этот интернет-магазин работает уже в течение последнего десятилетия. Магазин принимает онлайн-заказы на различные категории продуктов от своих покупателей и распределяет их соответствующим поставщикам. Например, предположим, вы заказываете немного мыла, масла и молока; Эти три предмета будут распространены среди трех соответствующих поставщиков. Затем три поставщика отправят свои поставки в общий пункт распределения, откуда весь центр доставки будет выполнять весь заказ. Теперь давайте посмотрим на проблему, с которой они сталкиваются сегодня.
Когда этот магазин начал свою деятельность, он принимал заказы в виде простого текстового файла, разделенного запятыми. Через некоторое время магазин переключился на размещение заказов на основе сообщений. Позже, некоторые разработчики программного обеспечения предложили размещение заказа на основе XML. В конце концов, магазин даже адаптировал интерфейс веб-службы. Теперь возникает настоящая проблема. Заказы теперь приходят в разных форматах. Очевидно, что каждый раз, когда компания обновляла формат приема заказов, она не хотела ломать ранее развернутый интерфейс, чтобы не вызывать недоразумения в уме клиента.
В то же время, поскольку бизнес продолжал расти, магазин периодически добавлял новых поставщиков в свой репертуар. У каждого такого поставщика был свой протокол приема заказов. Еще раз, мы сталкиваемся с проблемой интеграции; Архитектура нашего приложения должна быть масштабируемой, чтобы приспособить новых поставщиков к их уникальному механизму размещения заказов.
Вся ситуация показана на следующем рисунке —
Теперь давайте посмотрим, как Apache Camel может прийти на помощь, чтобы предоставить элегантную, поддерживаемую, масштабируемую архитектуру решения для описанного сценария.
Прежде чем приступить к решению, нам нужно сделать небольшое предположение. Для всех обсуждений в этом руководстве мы будем предполагать, что онлайн-заказы размещаются в формате XML. Типичный формат файла заказа, который мы будем использовать в наших обсуждениях, показан здесь —
<?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>
Мы будем использовать вышеупомянутый шаблон XML, чтобы проиллюстрировать примеры Camel в этом руководстве.