Camel In Action 閱讀筆記 第一章 認識Camel 1.1 Camel 介紹

來源:互聯網
上載者:User

標籤:blog   http   java   使用   os   檔案   

1.1  Camel 介紹Camel 是一個為了您的項目整合變得高效有趣的整合架構,Camel 項目在2007年初開始的,相對來說它還比較年輕,但它已然是一個非常成熟的開源項目,它所使用的是Apache 2開源License, 其背後的社區非常強大。Camel主要目的就是簡化整合,當您用心讀完本書以後,您會很感謝Camel並把它做為您的一個必需技能。Apache Camel這個項目之所以命名為Camel的主要原因是因為簡單好記,有一個小道說法是項目建立者之一在吸了一個叫"駱駝"牌的香煙後迸發出的靈感。關於名字的由來,Camel 網站的一個FAQ具體說明了為什麼會取名為Camel。1.1.1 Camel到底是什麼?  Camel的核心是一個路由引擎(Route Engine),更精確的說應該是一個路由引擎構建器(Route Engine Builder),它可以讓您自己定義路由規則,包括從哪接收訊息,如何處理以及發到哪去。Camel的整合式語言讓您編寫出強大精細的路由規則,就像一個業務處理流程。Camel的一個基本原則是它不關心您要處理什麼類型的資料。這是極其重要的一點,對於您或者開發人員來說,這意味著在不用把您的資料類型轉換為某一標準格式的情況下,使整合任何系統成為可能。Camel的高度抽象讓您在不同的協議和資料類型的系統之間可以使用相同的API,Camel中的組件(Components)為不同的協議和資料類型做了特定的實現。令人尖叫的是它竟然能支援80多種協議和資料類型[1],它的模組化設計和擴充性可以讓您實現自己的Component,這種架構設計省去了不必要的轉換工作,而且使得Camel 更快更輕量。所以需要像Camel這樣豐富的處理能力的項目,把Camel嵌入進去是個絕佳的選擇。例如,其它的開源項目Apache ServiceMix和 ActiveMQ就是使用Camel來做系統整合。我們再來談談Camel 不是什麼,Camel 不是一個企業服務匯流排(Enterprise Service Bus -- ESB),但仍然有些人說它是一個輕量級的ESB因為它能做路由,資料轉換,監控,編製業務處理流程等等,但Camel本身沒有容器或者一個可靠的訊息匯流排。我們卻可以選擇把它部署到這樣的環境裡像Open ESB和剛才提到的ServiceMix。所以我們把它當成一個整合架構而不是一個ESB.為了更好的瞭解Camel是什麼,我們接下來看看它的主要特性。1.1.2 為什麼要使用Camel?Camel在整合的領域裡有許多新奇的想法,這就是它的建立者們為什麼想建立Camel,而不是去使用一個現成的架構。我們會在本書裡學習到Camel這些特性,Camel背後的大體思想是:*路由調解(Mediation)引擎*企業整合模式(EIPs)*領特定領域語言(DSL)*可擴充的組件包*不關心路由的訊息內容 *模組化和可插拔的架構設計*POJO 模型 *易於配置*類型自動轉換器 *輕量的核心 *提供測試套件*充滿活力的社區 接下來,我們具體看看這些特性:路由調解引擎Camel的核心特性是它的路由調解引擎,一個路由引擎可以根據路由規則來選擇把訊息轉寄到哪。在Camel的世界裡,路由器的路由規則[2]的配置要使用到EIP和DSL,接下來我們會詳細介紹。 企業整合模式雖然企業整合的問題多樣化,但Gregor Hohpe和Bobby Woolf 卻發現這些問題和解決方案是可以統一歸納的, 他們為此寫了一本所有想做整合的人必讀的書Enterprise Integration Patterns,如果您還沒來得及讀,我們建議您先學習它。至少它能幫您更快的理解Camel相關概念。EIPs很有用不僅僅是因為對於每個整合類的問題都有一個解決方案,它還能協助您理解問題本身。模式歸納了一些更快解決問題的規律。使用模式和自己徒手去解決問題的區別就像一個是口語交流一個是手語交流。如果您去過國外,您就能感覺到這種差異。Camel很大程度上是基於EIPs來實現的,雖然EIPs描述了很多整合問題和解決思路,但它只是解決思路。Camel是用一種語言來實現這些思路。EIPs中的模式和Camel DSL差不多是一一對應的關係。領特定領域語言Camel的DSL為整合領域做出了很大貢獻,可能有一些其它的架構也提供了DSL的特性(比如可以例XML來定義路由規則),但不像Camel DSL基於自訂型語言。Camel之所以唯一也是因為它為常用的程式設計語言提供了DSL,例如Java、Scala、Groovy,同時它也提供XML的形式去描述路由規則。DSL的目的是讓開發人員專註解決整合問題,而不是對某個程式設計語言的使用。雖然Camel大部分是用Java寫的,但是它仍然支援多種語言混合編程。每項語言都有自己的優勢,您可能想用不同的語言去做不同的事情。使用Camel可以讓您在打造自己的方案時是自由的。下面是不同語言的DSL例子,它們做的都是同樣的事情。*Java DSL
from("file:data/inbox").to("jms:queue:order");
*Spring DSL
<route><from uri="file:data/inbox"/><to uri="jms:queue:order"/></route>
*Scala DSL
from "file:data/inbox" -> "jms:queue:order"
這些樣本都是真實可啟動並執行代碼,它們展示了把data/inbox下的檔案轉寄到JMS Queue  order上竟此簡單。這些都是在實際編程時使用DSL,您可以使用一些現在的工具來協助您代碼補全、編譯錯誤提示等等,如1.1 是Eclipse IDE的代碼補全幫您提示有哪些DSL可以使用。               可擴充的組件包Camel提供了擴充包有80多種Component,這些Component可以讓Camel連上不同的transport,或使用不同的API或識別不同的資料類型。不關心路由的訊息內容Camel可以路由各種形式的訊息,絕不僅僅是只有XML格式,在路由的過程中不用把您的內容轉換成某一標準格式。模組化和可插拔的架構設計Camel的模組化設計可以把任意Component載入到Camel的運行環境中去,而不用考慮這些Component是不是Camel自身提供的,它可以第三方提供的也可以您自訂的。POJO 模型在Camel中,Beans(或者POJO)被當做一等公民,Camel力爭讓您在項目整合中的任何地方任何時間都能使用Beans, 這意味著您可以把Camel的內建功能擴充到您自己的代碼中,在本書的第四章中會對Bean在Camel做一個完整的闡述。易於配置根據“約定優於配置”(Convention Over Configuration)的原則可以減小配置任務,為了直接把端點(Endpoints)配在路由(Rourte)裡,Camel 提供了人性化的配置。打個比方,您要配一個檔案接收器(Consumer)在一個目錄下去掃描以.txt結尾的檔案(包括子目錄),可以做如下配置:
from("file:data/inbox?recursive=true&include=*.txt")...
類型自動轉換器Camel內建的類型轉換機制有150多種,比如您不需要去顯示的去配置一個類型轉換器把位元組數群組轉換成字串,假如您需要一個轉換器是Camel沒有的,您需要自己去定義。但是別擔心,流行的那些轉換器Camel都已經實現了。輕量的核心Camel 的核心非常非常輕量,整個包只1.6MB,它僅依賴於Apache Commons Logging 和Fuse Source Commons Management。這足夠讓您可以把Camel部署或內嵌到任何地方,比如一個standalone的應用,web應用,Spring應用,Java EE應用,JBI容器[3],OSGi Bundle, Java Web Start或者Google App Engine。所以Camel不是被設計成為一台Server或者ESB,而是一個可以被內嵌在任何您想用的平台裡。提供測試套件為了方便測試您的Camel 程式,Camel提供了測試套件,這個套件Camel自身也在廣泛使用,大概有6000多[4]個單元測試用例,測試套件(Test Kit)中包含了測試專用組件,比如它可以Mock真實的Endpoints,同時提供Expectation來判斷程式運行是否達到預期效果,是成功還失敗。在本書第六章,我們會詳細介紹如何測試Camel。充滿活力的社區富有活力的社區是您計劃在您的應用中使用開源軟體的必備條件,不活躍的開源項目的社區一般不太行,一旦您遇到問題就只能孤軍奮戰了。而使用Camel時遇到問題,Camel的使用者和Camel的開發人員都會積極的協助您。更多關於Camel社區的介紹請參考附錄D.  現在您已經瀏覽了Camel的主要特性,接下來,我們將看一看Camel的安裝包並嘗試一個簡單的例子。 [1] 隨著項目的發展,現已經能支援161種協議和資料類型,更精確的資料請參考 https://github.com/apache/camel/tree/master/components[2] 路由規則可以被為為路由器的定義。[3]已經沒那麼流行了[4] 具體數值還請閱讀原始碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.