天天看點

再熟悉下Apache Camel的元件

之前跟着學習的太龐大了,這個作者講的也不錯,當做簡易化的複習了

Camel介紹:

       1.Camel是一個基于規則路由和中介引擎,提供企業內建模式的Java對象的實作,

          通過應用程式接口(或稱為陳述式的Java領域特定語言(DSL))來配置路由和中介的規則。

          領域特定語言意味着Apache Camel支援你在的內建開發工具中使用平常的,類型安全的,

          可自動補全的Java代碼來編寫路由規則,與那種複雜的XML配置相比極大簡化了規則定義開發。

          同時,它也支援在Spring中使用XML配置定義路由和中介規則。

       2.Camel 采用URI來描述各種元件,這樣你可以很友善地與各種傳輸或者消息子產品進行互動,

          其中包含的子產品有 HTTP, ActiveMQ, JMS, JBI, SCA, MINA,CXF Bus API。

          這些子產品是采用可插拔的方式進行工作的。

          Apache Camel的核心十分小巧你可以很容易地将其內建在各種Java應用中。

         目前Apache Camel作為一個路由以及媒介引擎可以與Apache ActiveMQ 、Apache CXF 、

          Apache MINA 、Apache ServiceMix項目內建。

         Camel提供的基于規則的路由(Routing)引擎,可以使用Camel定義的DSL語言,友善的定義出各種Routing。

         如下例:

               from(“file://xxxx").to("activemq://xxxx)将某檔案,讀入并寫入到ActiveMQ的JMS中。

2.基本概念

   1.Endpoint

      Camel中的Endpoint類似webservice中的endpoint,即某個資源的位置。

     Camel使用URI來定位一個enpoint. 比如上例中的from(“file://xxxx”),

     可以是file:///edi/po/?include=.*\\.txt, 代表/EDI/PO/下的所有txt檔案,即為一個endpoint。

  2.Component

      Camel的内置元件(使用者也可以按照Camel的接口約定,

      來定義自己的component),用以提供對某種協定的資源通路的支援,

      如上例中的file即為component, 其提供了對本地檔案系統通路的支援,

      activemq是另一個component, 提供了camel通路以ActiveMQ實作的JMS的直接通路能力。

  3.Routing Language

     Camel 提供了3種方式定義Routing,

            A. Java 語言相容的DSL語言

                舉例:

                    from("file:edifiles?include=.*\\.txt").to("smooks://classpath:smooks-config.xml") .

                    bean(wrapper, "wrap") .to("activemq:queue:tempQ")

                    end();

               說明:此例子中,是讀取edifiles檔案夾下的所有txt檔案,然後路由至smooks元件,

                          smooks是一個檔案轉換元件,完成後,調用bean元件,

                          bean是一個可以調用使用者自己定義的POJO的元件,完成後,

                          通過activemq元件,路由至一個名為tempQ的JMS隊列。

                 注:該文法是java相容的,可以正常在Eclipse等Java IDE中編輯并編譯。

            B. Spring文法相容的XML配置檔案

                 <route>

                      <from uri="file://inputdir/"/>

                      <convertBodyTotype="java.lang.String"/>

                     <to uri="activemq:queue:tempQ "/>

                 </route>

               此例子中,讀取inputdir檔案夾下的檔案,然後轉換成String,寫入名為tempQ的JMS隊列。

           C. ScalaDSL