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 示例。