Enterprise Application Integration 企業(yè)應用集成(EAI)
企業(yè)應用集成是必要的,幾乎每家公司都有很多新產(chǎn)品及應用,如何集成這些應用程序是一個(gè)問(wèn)題。來(lái)每十年誕生一個(gè)新范式,例如客戶(hù)端/服務(wù)器通信,面向服務(wù)的架構(SOA)或云計算。
此外,不同的接口或協(xié)議和技術(shù)的出現。過(guò)去數據存儲在文件,SQL數據庫在今天很通用。有時(shí),還需要NoSQL數據庫。同步遠程過(guò)程調用RPC或異步消息是通過(guò)如RMI,SOAP的Web服務(wù),REST或JMS進(jìn)行通信的。很多軟件筒倉還存在。
Enterprise Integration Patterns 企業(yè)集成模式(EIP)
當然,你可以推倒重來(lái),然后再寫(xiě)一些意大利面條代碼,讓?xiě)贸绦騾f(xié)同工作。不幸的是,你的管理者不會(huì )喜歡這個(gè)缺少長(cháng)遠眼光的解決方案。
企業(yè)集成模式(www.eaipatterns.com)幫助碎片的問(wèn)題,并使用標準化的方法來(lái)集成應用程序。使用相同的概念路由消息來(lái)改造。因此,每次有問(wèn)題時(shí)重新發(fā)明輪子不是個(gè)好主意。
解決方案1 :自定義解決方案
實(shí)現一個(gè)單獨的解決方案,適用于您的問(wèn)題還沒(méi)有分離切成碎片。此工程可能是最快的替代的小型用例。你必須自己編寫(xiě)所有。維護成本可能會(huì )高,特別是如果團隊成員改變。
解決方案2:集成框架
使用這類(lèi)框架有助于將多個(gè)集成模式集成在一個(gè)標準化的方式。它減少了損耗。每個(gè)開(kāi)發(fā)人員會(huì )很容易明白你做了什么(如果他知道所使用的架構) 。
解決方案3:企業(yè)服務(wù)總線(xiàn)(ESB )
應用企業(yè)服務(wù)總線(xiàn)在您的應用程序集成中。ESB還有更多的功能,如業(yè)務(wù)流程管理,注冊表或業(yè)務(wù)活動(dòng)監控。通常,您可以在圖形用戶(hù)界面配置路由實(shí)現這些功能 - 通常情況下,一個(gè)ESB是一個(gè)復雜的產(chǎn)品。學(xué)習曲線(xiàn)要高得多。但是提供您一個(gè)非常強大的工具。
Apache Camel是一個(gè)輕量級的集成框架,它實(shí)現了所有EIP。因此,您可以使用EIP所需的圖案容易地集成不同的應用。您可以使用Java,Spring的XML,scala或Groovy。幾乎每一個(gè)技術(shù),你可以想像是可用的,例如HTTP,FTP,JMS,EJB,JPA,RMI,JMS,JMX,LDAP的Netty,和很多很多(當然大多數ESB還提供了對他們的支持)。此外,自定義的組件可以很容易地被創(chuàng )建。
您可以部署Apache的駱駝作為獨立的應用程序,在Web容器(如Tomcat或Jetty),在JEE應用服務(wù)器(如JBoss應用服務(wù)器或WebSphere AS),在OSGi環(huán)境或與Spring容器組合。
如果你想多個(gè)應用程序使用不同的協(xié)議和技術(shù)集成,Apache Camel是真棒。除了支持如此多的技術(shù)和除了支持不同的編程語(yǔ)言,每個(gè)集成使用EIP下的相同概念!無(wú)論您使用何種協(xié)議。無(wú)論您使用什么技術(shù)。無(wú)論您使用何種領(lǐng)域特定語(yǔ)言( DSL) - 它可以通過(guò)Java , Scala, Groovy的或Spring的XML 。做同樣的方式。永遠!(有一個(gè)生產(chǎn)者,消費者,端點(diǎn)endpoint,有EIP概念,有定制處理器參數(如憑據) 。
比如使用Java DSL表達如下:
from(?activeMQ:orderQueue“)..transaction().log(?processing order“).to(mock:“notYetExistingInterface“)
使用Scala DSL:
?file:incomingOrders?noop=true“ process(new TransformationProcessor) to ?jdbc:orderDatastore“
如果你是一個(gè)開(kāi)發(fā)者,應該能看懂這些意思。
另外兩個(gè)非常重要的特點(diǎn)是對錯誤處理(例如使用死信隊列)和自動(dòng)測試的支持。
在自己的定制集成,集成框架,企業(yè)服務(wù)總線(xiàn)這三種方案中不使用Camel,難易程度如下:

如果你要整合一個(gè)或兩個(gè)技術(shù),如讀取某個(gè)文件或發(fā)送JMS消息,使用一些眾所周知的庫可能是更容易和更快,如Apache Commons IO或Spring JmsTemplate的。但是,請不要總是使用這些helper類(lèi),純文件或try-catch捕捉代碼錯誤的JMS集成是SOOOO難看的!
FuseSource雖然提供商業(yè)支持,我不會(huì )使用Apache駱駝在非常大的集成項目中。 ESB是在大多數情況下,正確的工具選擇。它提供了許多額外的功能,如BPM或BAM 。當然,你也可以使用多個(gè)單框架或產(chǎn)品和“創(chuàng )造”自己的ESB ,但是這是在浪費時(shí)間和金錢(qián)(在我看來(lái)) 。
通常情況下,開(kāi)放源代碼解決方案相比商業(yè)產(chǎn)品如WebSphere Message Broker更輕量級(你安裝此產(chǎn)品的試用版可能需要一兩天) !著(zhù)名的開(kāi)源ESB有Apache的ServiceMix的,騾子ESB和WSO2 ESB 。順便說(shuō)一句:你知道基于A(yíng)pache Camel框架基礎上一些ESB?(如Apache的服務(wù)組合和Talend ESB) 。因此,如果你喜歡Apache的駱駝,你也可以使用Apache ServiceMix這樣的ESB。
聯(lián)系客服