Apache Camel系列(1)----使用場景


Apache Camel是一個基於Enterprise Integration Pattern(企業整合模式,簡稱EIP)的開源框架。EIP定義了一些不同應用系統之間的消息傳輸模型,包括常見的Point-to-Point,Pub/Sub模型。更多關於EIP的信息,可以參見 這里
 
Apache Camel主要提供了以下功能:
1,實現了EIP的大部分模式,如果你要在不同的應用系統之間以不同的方式傳遞消息,那么你可以從Apache Camel中找到解決反感。
2,提供了大量Component(組件),每個組件都是一種消息中間件(或消息服務)的具體實現,每個消息中間件所用的協議都是不同的,因此,你可以通過多種不同的協議來完成消息傳輸。
3,允許用戶定義靈活的路由規則,從這個角度來說,Apache Camel時一個規則引擎。
 
那么Apache Camel的應用場景有那些呢,這里列舉一些:
 
1,消息匯聚,比如你有來自不同服務器的消息,有ActiveMQ,RabbitMQ,WebService等,你想把它們都存儲到日志文件中,那么可以定義如下規則。
 
1 new RouteBuilder() {
2     @Override
3     public void configure() throws Exception {
4         from("amqp:queue:incoming").to("log:com.mycompany.log?level=DEBUG");
5         from("rabbitmq://localhost/A/routingKey=B").to("log:com.mycompany.log?level=DEBUG");
6         from("jetty:http://localhost:8080/myapp/myservice").to("log:com.mycompany.log?level=DEBUG");
7     }
8 }

 

from表示從這個endpoing取消息,to表示將消息發往這個endpoint,endpoint是消息地址,包含協議類型以及url。 

 
2,消息分發,分為兩種,順序分發和並行分發。順序分發時,消息會先到到第一個endpoing,第一個endpoint處理完成后,再分發到下下個endpoint。如果第一個endpoing處理出現故障,那么消息不會被傳到第二個endpoint。比如有如下規則:
from("amqp:queue:order").to("uri:validateBean", "uri:handleBean", "uri:emailBean");
這個規則是從order隊列中取訂單信息,然后依次驗證訂單,處理訂單,並發送郵件通知用戶。任何一個步驟出錯,下一個步驟將不回執行。
 
並行分發是將得到的消息同時發送到不同的endpoint,沒有先后順序之分,各個endpoint處理消息也是獨立的。如果將以上路由改成
from("amqp:queue:order").multicast().to("uri:validateBean", "uri:handleBean", "uri:emailBean");
那么消息就會同時發到to所對應的endpoint。
 
3,消息轉換,比如想將xml數據轉換成json數據,可以使用如下規則。
 
from("amqp:queue:order").process(new XmlToJsonProcessor()).to("bean:orderHandler");
其中XmlToJsonProcessor是自定義的類,繼承org.apache.camel.Processor,用於將xml數據轉換成json。
 
4,規則引擎,你可以使用Spring Xml, Groovy這類DSL來定義route,這樣無需修改代碼,就能達到修改業務邏輯的目的。
例如上邊的規則,from("amqp:queue:order").to("uri:validateBean", "uri:handleBean", "uri:emailBean");使用Spring Xml定義如下:
 
<route>
        <from uri="amqp:queue:order"/>
        <multicast>
            <to uri="uri:validateBean"/>
            <to uri="uri:handleBean"/>
            <to uri="uri:emailBean"/>
        </multicast>
</route>
 
如果需要在處理完訂單后添加日志,可以改稱如下規則
 
<route>
        <from uri="amqp:queue:order"/>
        <multicast>
            <to uri="uri:validateBean"/>
            <to uri="uri:handleBean"/>
            <to uri="log:com.mycompany.log?level=INFO"/>
            <to uri="uri:emailBean"/>
        </multicast>
</route>

 

另外camel提供了大量的內置Processor,用於邏輯運算,過濾等,這樣更加容易定移除靈活的route,例如:
 
from("amqp:queue:order").filter(header("foo").isEqualTo("bar")).choice()
    .when(xpath("/person/city = &#39;London&#39;"))
        .to("file:target/messages/uk")
    .otherwise()
        .to("file:target/messages/others");

 

這條規則先對訂單進行過濾,只處理header中foo的值為bar的訂單,然后根據用戶的城市進行將訂單傳給不同的endpoint。
 
 
Apache Camel的應用場景有很多,這里只是大致列舉了幾種。如果還不是很理解Camel的應用場景,你可以先到 Enterprise Integration Pattern(企業整合模式,簡稱EIP)中去找對應的scenario,點擊每種scenario下的鏈接,就能找到Camel對應的實現。

 

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM