Apache Camel - 简介

考虑这样一种情况,您所在城镇的一家大型在线商店邀请您为他们设计 IT 解决方案。 稳定且可扩展的解决方案将帮助他们克服当今面临的软件维护问题。 这家网上商店在过去十年里一直在经营业务。 该商店接受客户对不同类别产品的在线订单,并将其分发给各自的供应商。 例如,假设您订购了一些肥皂、油和牛奶; 这三件物品将分别分发给三个供应商。 然后,三个供应商将把他们的物资发送到一个共同的配送点,整个订单将由配送中心完成。 现在,让我们看看他们今天面临的问题。

当这家商店开始营业时,它接受以逗号分隔的纯文本文件形式的订单。 一段时间后,商店改用消息驱动下单。 后来,一些软件开发人员建议采用基于 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 示例。