2010-01-22 130 views
26

我有困難,我的頭圍繞着這個概念。阿帕奇駱駝的生產者和消費者

我試圖實現一個端點,監聽一個專有格式的傳入消息的tcp端口,然後轉換消息,並駱駝接管轉發和路由。

我是否正確理解生產者負責將消息發送到EndpointConsumer從該終端接收消息?

在研究接口時,我無法弄清這些對象之間的消息流,特別是在消費者部分。 Consumer只定義start()stop()方法...

當建立一個框架實現的測試,Camel生產者對象調用createProducer()在端點和process()。之後,它返回,swithout與消費者或與之相關的處理器做任何事情。

難道有人指着我正確的方向嗎?

回答

17

我終於想通了通過看流成分。

原來我錯誤地認爲端點是一切事物必須走向中心的東西。

簡單的答案是,消費者從外部系統接收數據(在我的情況下監聽服務器套接字)並且生產者將數據發送到外部系統。因爲我的端點是隻讀的(它不會被用作Camel路由過程的最終目的地),所以我真的不需要一個生產者(如果系統仍然嘗試這樣做,它應該拋出一個RuntimeException),因爲配置錯誤)。一個合適的例子是駱駝原子終點 - 你可以閱讀飼料,但是(從1.6.0開始)你不能發佈飼料。

同樣,您只需要一個生產者,用於只接收不接收來自外部系統(例如日誌)的數據的只寫端點。

36

重要的是要記住,一個Endpoint,由Component(即端點廠)創建的,可以在駱駝Route要麼底坐是非常重要的。如果您將組件置於路由的開始處,則必須執行部分的組件。這可以將特定的輸入/請求(如HTTP請求)轉換爲通用的 - 駱駝Exchange - 可以沿着路線行進。而如果您將組件置於路線末尾那麼您必須執行ProducerProducer做了從路線末尾取Exchange並將其轉換爲特定的東西(如JMS消息)的工作。

我發現保險絲ESB文檔比Apache Camel website更好(一般)。從Fuse ESB Component page

消費端點消耗請求。它們總是出現在路線的起始 處,並且它們封裝負責接收傳入請求並分派傳出答覆的代碼。

生產者端點產生請求。它們總是出現在 的末尾,它們封裝了負責調度傳出請求和接收傳入回覆的代碼。


enter image description here

+6

尼斯解釋清楚的感謝。這些術語通常是反直覺的,因爲駱駝的典型用戶正在思考路由和消息交換,而不是編寫新的駱駝組件。從messageExchange的角度來看,這些術語是錯誤的。消費者生成messageExchange,而生產者消費messageExchange。 – 2015-01-22 01:03:24

+0

作爲駱駝的新手,我很困惑這個答案。如果我查看'org.apache.camel.Producer'接口,它指定的唯一契約是'createExchange'方法。看着像EventDrivenPollingConsumer這樣的東西,Exchange的唯一功能就是「處理」它。交易所沒有通過一條路線 - 這就是處理器的工作原理,這是我的印象。 – Snekse 2015-05-15 15:29:26

+0

@Snekse答案的描述部分恰恰說明了這一點。但無論如何,我認爲這種技術性對於生產者和消費者的概念理解沒有多大關聯。 – chrisjleu 2015-05-15 16:51:02