日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache Camel简介与入门

發布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache Camel简介与入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Apache Camel 是一個基于知名的企業應用模式(Enterprise Integration Patterns)多功能的整合框架.

?

StackOverflow上有很多學習Apache Camel的資源,而這里僅僅是使用一個實例來簡單的介紹一下Apache Camel

基礎

Apache Camel十一個Java庫和引擎,有多種不同的整合模式,然而他并不是BPMN或者ESB,雖然可以在此引擎下實現他們。Apache Camel是一個編程人員調節、整合問題的工具。

Message

org.apache.camel.Message是Camel中一個基本的包含數據和路由的實體,Messages包含了

?

  • 唯一的識別(Unique Identifier)--java.lang.String類型
  • 頭信息(Headers)--會提供一些內容的提示,頭信息被組織成名值對的形式,string-->Object
  • 內容(body)是一個Object類型的對象,這就意味著,你要確保接收器能夠理解消息的內容。當消息發送器和接收器使用不同的內容格式的時候,你可以使用Camel的數據轉換機制將其轉換為一個特定的格式。在許多情況下預先定義類型可以被自動轉換。
  • 錯誤標記(fault flag)使用來標記正常或者錯誤的標記,通常由一些標準類定義,例如(WSDL)

?

Exchange

org.apache.camel.Exchange 是一個消息之間通信的抽象的會話。下面列出的就是這樣一個會話,使得組件更為全面

?

  • Exchange ID
  • MEP?一個類似InOnly或者InOut的消息交換模式。當模式是InOnly的時候,消息交換中只包含IN-Message
  • Exception在路由過程中的任何異常
  • Properties有點類似與message 的headers ,但是他們將持續到整個exchange結束,Camel還可能利用他們進行一些特殊的通信。
  • IN-Message
  • OUT-Message

?

Camel Context

現在讓我們來看看一張圖,我們看到的是一些不同的相互鏈接的構件,而在他們中間起鏈接作用的粘合劑就是Camel Context了。他將實體鏈接一起,有的時候被稱為Camel運行是容器。

Endpoint

是Camel中的一個基本概念,Endpoint作為Camel系統中一個通道的端點,可以發送或者接受消息。在Camel中Endpoint使用URI來配置。在運行時Camel通過URI來查找端點。端點的功能強大、全面而且又可維護。來看一些例子。

//Pooling on data/inbox every 2 seconds file:data/inbox?delay=2000 //JMS queendpoid with name order jms:queue:order //Run's external Application with output.txt as parameter. exec:archiver.exe?output.txt

?

?

Component

Component是一些Endpoints URI的集合。他們通過連接碼來鏈接(例如file:,jms:),而且作為一個endpoint的工廠。現在Camel中又超過80個Component。當然你一可以通過擴展org.apache.camel.impl.DefaultComponent來實現自己的Component

Route

顧名思義,Route,就是路由,它定義了Message如何在一個系統中傳輸的真實路徑或者通道。路由引擎自身并不暴露給開發者,但是開發者可以自己定義路由,并且需要信任引擎可以完成復雜的傳輸工作。每個路由都有一個唯一的標識符,用來記錄日志、調試、監控,以及啟動或者停止路由。

路由也有一個輸入的Message,因此他們也有效的鏈接到一個輸入端點。路由定義了一種領域特有的語言(DSL)。Camel提供了java、scala和基于XM的Route-DSL。

示例路由:

//simple route. from("file:data/inbox").to("jms:queue:order")

?

?

路由可以使用過濾器、多播、接收列表、并行處理來定義,從而變得非常靈活。由于這篇文章只是簡單的介紹Camel,我這里只給出一個注釋的例子。這個使用了“direct:”架構,他提供了當消息生產者發出消息后直接的、同步的調用。

//Every 10 seconds timer sends an Exchange to direct:prepare from("timer://foo?fixedRate=true&period=10000").to("direct:prepare"); // Onother Routes can begin from "direct:prepare" // This now depends on timer, logging and putting a message to the queue. from(direct:prepare).to("log:com.mycompany.order?level=DEBUG").to("jms:queue:order?jmsMessageType=Text");

?

?

Processor

org.apache.camel.Processor 是一個消息接受者和消息通信的處理器。當然,Processor是Route的一個元素,可用來消息格式轉換或者其他的一些變換。

Processor myProcessor = new Processor() {public void process(Exchange exchange) {exchange.getBody();//e.g do something with Body..} };from("file:data/inbox").filter(header("foo").isEqualTo("bar")).process(myProcessor).to("jms:queue:order")

?

?

示例

使用maven創建一個Camel項目(Camel 架構概攬)。

mvn archetype:generate -DgroupId=org.holbreich -DartifactId=filecopy -DarchetypeGroupId=org.apache.camel.archetypes -DarchetypeArtifactId=camel-archetype-java -Dversion=1.0.0-SNAPSHOT

?

?

這個項目包換如下代碼:

package org.holbreich.filecopy; import org.apache.camel.main.Main;public class MainApp { /** * A main() so we can easily run these routing rules in our IDE */ public static void main(String... args) throws Exception {Main main = new Main();main.enableHangupSupport();main.addRouteBuilder(new MyRouteBuilder());main.run(args);} } and package org.holbreich.filecopy; import org.apache.camel.builder.RouteBuilder;/** * A Camel Java DSL Router */ public class MyRouteBuilder extends RouteBuilder {/** * Let's configure the Camel routing rules using Java code... */ public void configure() {// here is a sample which processes the input files// (leaving them in place - see the 'noop' flag)// then performs content based routing on the message using XPathfrom("file:src/data?noop=true").choice().when(xpath("/person/city = 'London'")).to("file:target/messages/uk").otherwise().to("file:target/messages/others");} }

?

?

這個項目已經是一個可運行的了,趕緊試一試吧!

OSChina.NET原創翻譯/原文鏈接

?

from:?https://www.oschina.net/question/82993_71225

總結

以上是生活随笔為你收集整理的Apache Camel简介与入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。