1. 程式人生 > >Camel中的重要概念

Camel中的重要概念


二是(更好)讓CamelContext物件中的對映表延遲初始化,這種方式要開發者實現Component介面時遵循一定的約定。例如,假設你寫了個名為com.example.myproject.FooComponent的類,而且你想讓Camel自動以"foo"來進行識別。為了達到這樣的目的你必須寫一個叫"META-INF/services/org/apache/camel/component/foo"的Properties檔案(沒有.properties檔案字尾),該Properties只有一個條目class,該條目的值就是該元件的全路徑名:
class=com.example.myproject.FooComponent
如果你還讓com.example.myproject.FooComponent以name "bar"識別,你還得寫另外一個properties檔案(檔名為bar)在相同的目錄中,而且含有相同的內容。一旦你寫了這些Properties檔案,你建立的jar包中含有com.example.myproject.FooComponent以及相應的Properties檔案,並且這個jar包加入到了CLASSPATH下。這樣在應用級別就可以用程式碼在CamelContext物件上呼叫createEndpoint("foo:...")方法,Camel將在CLASSPATH中找到"foo"properties檔案,獲取該檔案中class條目的值,然後使用反射技術建立指定類的例項。
Camel支援多種開箱即用通訊技術,該開箱即用支援由多個實現了Component介面的類以及它們相應的properties檔案來實現,以供CamelContext物件來構建這張named Component物件對映表。
在前面的部分我給出了一個如下例子,呼叫CamelContext.getEndpoint().
myCamelContext.getEndpoint("pop3://
[email protected]
?password=myPassword");
當我第一次給出這個例子時,我說getEndpoint()方法的引數是一個URI,我之所以那樣說的原因是Camel的線上幫助文件和Camel的原始碼都聲稱這是一個URI。而實際上,這個引數嚴格上來說是一個URL。這是因為當Camel從引數中抽取component name時,它第一步找":",這是一個簡單演算法。要理解其原因,就得回到Section4.4("The meaning of URL,URI,URN and IRI"),一個URI可能是一個URL或者是一個URN,考慮下面的getEndpoint()方法呼叫:
myCamelContext.getEndpoint("pop3:...");
myCamelContext.getEndpoint("jms:...");
myCamelContext.getEndpoint("urn:foo:...");
myCamelContext.getEndpoint("urn:bar:...");
在上面的例子中Camel標識這些元件用的名稱分別是:"pop3","jms","urn"和"urn".如果後兩個元件用"urn:foo"和"urn:bar"來標識可能會更貼切,實際上用的是"urn"和"urn"(只取第一個":"號前面部分作為Component name)。所以在實際應用中你必須用一個URL("<schema>:...形式")來標識一個endpoint而不是用一個URN("urn:<schema>:..."形式)。因為這裡缺少對URN的更多支援所以getEndpoint()方法的引數是一個URL而不是所謂的URI。

Message and Exchange
Message介面是一個訊息的抽象,比如說一個請求,一個回覆或者一個例外訊息。
Camel為每一個支援的通訊技術提供了Message介面的相應實現類。例如,JmsMessage類提供了JMS-specific的Message介面實現。公共介面Message提供了getter與setter方法來訪問message id,訊息休和訊息頭欄位。
Exchange介面是訊息交換的抽象,一個請求訊息和它相應的應答或者例外訊息。在Camel技術中,請求,應答和例外訊息分別被稱為輸入(in),輸出(out),和錯誤(fault)訊息。
Camel也為第一種支援的通訊技術提供了Exchange介面的實現。例如,JmsExchange類提供了JMS-specific的Exchange介面實現。Exchange公共介面的API有很大的侷限性,這是有意設計成這樣的。因為每一個實現Exchange介面的實現類將會提供具體的技術相關的方法。
在應用級別程式設計師幾乎不會直接訪問Exchange介面(或者其實現類)。然而,在Cmael的很多類是泛型類are instantiated on(a class that implements)Exchange。這樣做的原因是Exchange接口出現在了許多泛型的類和方法中。

Processor
Processor介面代表一個可以處理訊息的類,其簽名如下:
package org.apache.camel;
public interface Processor {
    void process(Exchange exchange) throws Exception;
}
注意process()方法的引數是一個Exchange物件而不是一個Message物件。這樣提供了擴充套件性。例如,一個實現類的process()方法初始可能會呼叫exchange.getIn()方法得到輸入訊息並且進行處理。如果在處理的過程中發生了錯誤,該方法可以呼叫exchange.setException()方法。一個應用級別的開發者可能會開發一個類實現Process介面來執行一個業務邏輯,然後在Camel類庫中已經有很多類實現了Processor介面來支援EIP book中的設計模式。例如,ChoiceProcessor實現了訊息的路由
,它使用一種級聯的if-then-else語句來路由一個來自佇列的訊息到多個輸出佇列中的一個。另外一個例子是FilterProcessor類,它將會拋棄那些不滿足條件的訊息。

Routes, RouteBuilders and Java DSL
一個路由是訊息從一個輸入佇列一步一步地,通過任意型別的決斷移動到一個目的佇列。Camel為應用提供了兩種方式供開發者指定路由,一種是將路由資訊配置在一個XML檔案當中,另一種方式是Camel中所謂的Java DSL(domain-specific language)。

Introduction to Java DSL
對很多人來說"domain-specific language"詞語意味著一個編譯器或直譯器可以處理一個包含了關鍵字和具體語義的輸入檔案到一個特定的域中。但這不是Camel所採用的方式。Camel文件中堅持用“Java DSL”代替“DSL”,但這也不能完全避免潛在的混淆。Camel的“Java DSL”是一個類庫,可以以一種與DSL很類似的方式使用,除非它包含很少的java語法。你可以看下面的例子,後面的註釋解釋了這個例子的構成。

相關推薦

Hadoop重要概念簡要總結

-m 海量數據 存儲 接口 nod 匯總 out -c 數據的分布 Hadoop是一個利用大規模計算機集群,可處理大量數據的分布式並行框架。 Hadoop 官網 Hadoop的核心設計包括HDFS和MapReduce。 HDFS HDFS(Hadoop Distribute

Camel重要概念

二是(更好)讓CamelContext物件中的對映表延遲初始化,這種方式要開發者實現Component介面時遵循一定的約定。例如,假設你寫了個名為com.example.myproject.FooComponent的類,而且你想讓Camel自動以"foo"來進行識別。為了達到這樣的目的你必須寫一個叫"MET

Hadoop一些重要概念簡要總結

分享圖片 quest 文件映射 node hadoop 計算機 index hdf 分布式協調 Hadoop是一個利用大規模計算機集群,可處理大量數據的分布式並行框架。 Hadoop 官網 Hadoop的核心設計包括HDFS和MapReduce。 HDFS HDFS(Had

電商專案重要概念 SPU 與SKU

什麼是SPU 和SKU? 在電商中對於商品,有兩個重要的概念:SPU和SKU 先看一段非常長的介紹 SPU = Standard Product Unit (標準產品單位) SPU是商品資訊聚合的最⼩小單位,是⼀一組可服⽤用、易易檢索的標 準化資訊的集合,該集合描述了了⼀一個產品的特性。 通

OrCAD: Capture CIS兩個重要概念:instance 和 occurrences

用OrCAD設計原理圖必須理解兩個概念instance 和 occurrences。對於元件放置、替換、修改屬性等很多操作都和這兩個概念有關。   拋開抽象的說明,我們用例項說明他們的區別。假如你在自己的元件庫中已經建立了一個元件AD8056(AD公司的運放)。

CSS 重要的層疊概念

最近在專案的過程中遇到了一個問題,menu-bar希望始終顯示在最上面,而在之後的元素都顯示在它之下,當時設定了 z-index 也沒有效果,不知道什麼原因,因此找了一下css有關層疊方面的資料,解決了這個問題,這裡記錄一下~ 螢幕是一個二維平面,然而HTML元素卻是排

App效能測試的幾個重要概念

我們在使用各種 App 的時候基本會關注到:這款軟體挺耗流量的?執行起來裝置掉電有點快嘛?切換頁面的時候還會有卡頓等現象?如果遇到有這些問題的 App 我們基本會將它請出我們的 我們在使用各種 App 的時候基本會關注到:這款軟體挺耗流量的?執行起來裝置掉電有點快嘛?切換頁面的時候還會有卡頓等現

SLAM重要概念,通俗講解(持續更新

    本文由本文由 @DavidHan@DavidHan出品,轉載請注明出處出品,轉載請注明出處     文章鏈接:文章鏈接:http://blog.csdn.net/david_han008/article/details/78573616     

用大白話講講幾個機器學習重要概念

這次的文章是對於周志華所著的《機器學習》一書第二章模型評估與選擇的讀書筆記,還是以問答的形式儘量通俗地對一些基本的概念作一個總結。 一 在模型訓練中常常會過擬合,能不能跟一個小白講講什麼是過擬合? 先來看看官方原話是怎麼說的:當學習器把訓練樣本覺得‘太好了’

Maven的幾個重要概念(三):POM

原文: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html 本文基本上是翻譯+一點點理解。 什麼是POMPOM(Project Object Model) 是Maven的基礎。它

[學習ES系列]-2.了解ElasticSearch重要的基礎概念

操作 base tab index earch 概念 集合 sea 數據 集群(cluster)與節點(node) 一個節點是一個集群的一部分。 索引(Index)、類型(Type)、文檔(Document) 索引:含有相同屬性的文檔的集合 類型:索引可以定義一個或多個類

(三)(1) Z-Stack協議幾個重要概念的理解

     PANID的出現一般是伴隨在,確定通道以後的。PANID其全稱是Personal Area Network ID,網路的ID(即網路識別符號),是針對一個或多個應用的網路,用於區分不同的ZigBee網路,一般是mesh或者cluster tree兩種拓撲結構之一。所有節點的panID唯一,一個網路

JavaWeb開發重要概念

C/S計算模式:客戶機與使用者互動,收集資訊,通過網路向伺服器請求資料庫、電子表格、文件等的處理工作;伺服器負責管理資料庫的訪問,為多個客戶程式管理資料。B/S計算模式:使用者通過瀏覽器向分佈在網路上的許多伺服器傳送請求,伺服器對瀏覽器的請求進行處理,將使用者所需的資訊返回給瀏覽器。CGI:通用閘道器介面,一

Maven的幾個重要概念(二):lifecycle, phase and goal

原文:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html 當我們在使用Maven做一些工作,如打包,編譯,執行測試等等任務時,我們已經使用到了Maven中的幾個重要概

C++一些重要概念區別

指標和引用的比較(p171)雖然使用引用(reference)和指標都可間接訪問另一個值,但它們之間有兩個重要區別。 第一個區別在於引用總是指向某個物件:定義引用時沒有初始化是錯誤的。 第二個重要區別則是賦值行為的差異:給引用賦值修改的是該引用所關聯的物件的值,而並不是使引

sip協議的一些重要概念介紹

  SIP協議中,比較有特點的就是SIP事務了。那麼想要理解SIP事務的概念,我們還需要了解sip請求的一些內容。sip事務的概念:一個sip請求以及由它觸發的一系列應答(包括臨時應答和一個最終應答)。 sip請求有6種:INVITE, ACK, OPTIONS, BY

Spring Aop四個重要概念,切點,切面,連線點,通知

直說正題: 1. 通知: 就是我們編寫的希望Aop時執行的那個方法。我們通過Aop希望我們編寫的方法在目標方法執行前執行,或者執行後執行。 2. 切點:切點就是我們我們配置的滿足我們條件的目標方法。比

C語言重要概念匯總

parent 結束 操作系統 字符 靜態 有一個 靜態區 進制 會有 作者:郭孝星 微博:郭孝星的新浪微博 郵箱:[email protected]/* */ 博客:http://blog.csdn.net/allenwells Gi

HTML重要的知識點,表單

多行文本 圖像 輸入 mes bmi text 提示 隱藏域 radio   今天跟大家分享一下有關HTML中比較重要的一個知識點—表單:   <form></form>表單   這是一個雙標簽,form表單有兩個必須要有的屬性,①action就是指

計算機概念: 視圖 VS 鏡像

lec 用戶 行數據 記錄 統計 語句 一份 同時 查看 這兩個概念還是不太一樣的。下面來說說個人的理解,記錄一下。 1. 鏡像 鏡像可以理解為一份完全一樣的拷貝。也就是"深度拷貝",一個復制品。 比如 iso映像文件,ubuntu-12.04.5-desktop-amd6