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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

apache camel_使用Java的Apache Camel入门

發(fā)布時(shí)間:2023/12/3 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache camel_使用Java的Apache Camel入门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

apache camel

Apache Camel是一個(gè)非常有用的庫,可以幫助您處理來自許多不同來源的事件或消息。 您可以通過許多不同的協(xié)議(例如在VM,HTTP,FTP,JMS甚至DIRECTORY / FILE之間)移動(dòng)這些消息,但仍然使處理代碼沒有傳輸邏輯。 這樣,您就可以專注于摘要消息的內(nèi)容。

在這里,我將提供一個(gè)教程,介紹如何使用Java而不是Groovy來開始使用Apache Camel。

讓我們首先創(chuàng)建一個(gè)Maven項(xiàng)目pom.xml文件。

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>camel-spring-demo</groupId><artifactId>camel-spring-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><camel.version>2.11.1</camel.version></properties><dependencies><dependency><groupId>org.apache.camel</groupId><artifactId>camel-core</artifactId><version>${camel.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.5</version></dependency></dependencies></project>

我們將僅探索camel-core ,它實(shí)際上包含許多您可能會(huì)使用的有用組件。 同樣出于記錄目的,我添加了一個(gè)slf4j-simple作為記錄器實(shí)現(xiàn),因此我們可能會(huì)在控制臺(tái)上看到輸出。

接下來,您只需要一個(gè)類即可構(gòu)造Route 。 Route就像是對(duì)駱駝的指令定義,關(guān)于如何將消息從一個(gè)點(diǎn)移動(dòng)到另一個(gè)點(diǎn)。 我們將創(chuàng)建src/main/java/camelcoredemo/TimerRouteBuilder.java文件,該文件src/main/java/camelcoredemo/TimerRouteBuilder.java生成一次計(jì)時(shí)器消息,然后傳遞給簡(jiǎn)單地對(duì)其進(jìn)行記錄的處理器。

package camelcoredemo;import org.slf4j.*; import org.apache.camel.*; import org.apache.camel.builder.*;public class TimerRouteBuilder extends RouteBuilder {static Logger LOG = LoggerFactory.getLogger(TimerRouteBuilder.class);public void configure() {from("timer://timer1?period=1000").process(new Processor() {public void process(Exchange msg) {LOG.info("Processing {}", msg);}});} }

這就是您開始所需要的。 現(xiàn)在您可以構(gòu)建并運(yùn)行此簡(jiǎn)單演示。

bash> mvn compile bash> mvn exec:java -Dexec.mainClass=org.apache.camel.main.Main -Dexec.args='-r camelcoredemo.TimerRouteBuilder'

請(qǐng)注意,我們甚至沒有編寫Java 類,而只是使用org.apache.camel.main.Main選項(xiàng)來接受RouteBuilder類名作為參數(shù)。 然后它將自動(dòng)加載并創(chuàng)建路線。

控制

啟動(dòng)Camel時(shí),它將創(chuàng)建一個(gè)CamelContext對(duì)象,該對(duì)象包含有關(guān)如何運(yùn)行它的許多信息,包括我們創(chuàng)建的Route的定義。 現(xiàn)在,如果您想對(duì)此CamelContext進(jìn)行更多控制,則需要編寫自己的Main類。 我會(huì)在這里給你看一個(gè)簡(jiǎn)單的例子。

package camelcoredemo;import org.slf4j.*; import org.apache.camel.*; import org.apache.camel.impl.*; import org.apache.camel.builder.*;public class TimerMain {static Logger LOG = LoggerFactory.getLogger(TimerMain.class);public static void main(String[] args) throws Exception {new TimerMain().run();}void run() throws Exception {final CamelContext camelContext = new DefaultCamelContext();camelContext.addRoutes(createRouteBuilder());camelContext.setTracing(true);camelContext.start();Runtime.getRuntime().addShutdownHook(new Thread() {public void run() {try {camelContext.stop();} catch (Exception e) {throw new RuntimeException(e);}}});waitForStop();}RouteBuilder createRouteBuilder() {return new TimerRouteBuilder();}void waitForStop() {while (true) {try {Thread.sleep(Long.MAX_VALUE);} catch (InterruptedException e) {break;}}} }

如您所見,我們?cè)赾reateRouteBuilder()方法中重新使用了現(xiàn)有的TimerRouteBuilder類。 現(xiàn)在,我們的Main類可以完全控制何時(shí)創(chuàng)建,啟動(dòng)和停止CamelContext 。 此上下文使您可以控制如何全局配置駱駝,而不是在Route級(jí)別。 javadoc鏈接提供了您可以探索的所有setter方法。

注意,我們還需要在Main類中提供一些設(shè)置代碼。 首先,我們需要處理正常關(guān)閉,因此我們添加了一個(gè)Java關(guān)閉掛鉤來調(diào)用上下文stop() 。 其次,我們需要在上下文啟動(dòng)后添加一個(gè)線程塊。 原因是CamelContext#start()方法是非阻塞的! 如果您在啟動(dòng)后沒有阻塞Main線程,那么它將在緊隨其后退出,將沒有太大用處。 您想要將Camel作為服務(wù)(例如服務(wù)器)運(yùn)行,直到您明確按CTRL+C終止該過程為止。

改進(jìn)

如果您不想處理很多諸如上述的Main類設(shè)置代碼,則可以簡(jiǎn)單地?cái)U(kuò)展camel-core intead提供的org.apache.camel.main.Main類。 piggy帶這個(gè)類,您將不僅沒有自動(dòng)設(shè)置上下文的功能,而且還可以獲得所有其他命令行功能,例如控制運(yùn)行該進(jìn)程的時(shí)間,啟用跟蹤,加載自定義路由類等。

重構(gòu)前面的示例,如下所示。

package camelcoredemo;import org.slf4j.*; import org.apache.camel.builder.*; import org.apache.camel.main.Main;public class TimerMain2 extends Main {static Logger LOG = LoggerFactory.getLogger(TimerMain2.class);public static void main(String[] args) throws Exception {TimerMain2 main = new TimerMain2();main.enableHangupSupport();main.addRouteBuilder(createRouteBuilder());main.run(args);}static RouteBuilder createRouteBuilder() {return new TimerRouteBuilder();} }

現(xiàn)在我們的TimerMain2變得更短了,您可以嘗試一下,它的功能應(yīng)與以前相同。

bash> mvn compile bash> mvn exec:java -Dexec.mainClass=camelcoredemo.TimerMain2 -Dexec.args='-t'

注意,我們給了-t選項(xiàng),它將轉(zhuǎn)儲(chǔ)Route跟蹤。 使用-h ,您將看到所有可用的選項(xiàng)。

將豆添加到駱駝

在上面的TimerRouteBuilder示例中,我們即時(shí)創(chuàng)建了一個(gè)Processor 。 現(xiàn)在,如果您要將幾個(gè)不同的Processor組合在一起,那么將噪音降至最低會(huì)更好。 Camel允許您通過在其注冊(cè)表空間中注冊(cè)處理Bean來做到這一點(diǎn),然后只需在路由中將它們作為bean組件進(jìn)行引用即可。 這是將上述示例轉(zhuǎn)換為Bean處理的方法。

package camelcoredemo;import org.slf4j.*; import org.apache.camel.*; import org.apache.camel.builder.*; import org.apache.camel.main.Main;public class TimerBeansMain extends Main {static Logger LOG = LoggerFactory.getLogger(TimerBeansMain.class);public static void main(String[] args) throws Exception {TimerBeansMain main = new TimerBeansMain();main.enableHangupSupport();main.bind("processByBean1", new Bean1());main.bind("processAgainByBean2", new Bean2());main.addRouteBuilder(createRouteBuilder());main.run(args);}static RouteBuilder createRouteBuilder() {return new RouteBuilder() {public void configure() {from("timer://timer1?period=1000").to("bean:processByBean1").to("bean:processAgainByBean2");}};}// Processor beansstatic class Bean1 implements Processor {public void process(Exchange msg) {LOG.info("First process {}", msg);}}static class Bean2 implements Processor {public void process(Exchange msg) {LOG.info("Second process {}", msg);}} }

現(xiàn)在您看到我的Route非常狹窄,沒有雜波; 并且我已經(jīng)將處理代碼重構(gòu)為各個(gè)類。 當(dāng)您編寫更復(fù)雜的Route來解決業(yè)務(wù)邏輯時(shí),這可以促進(jìn)更好的代碼管理和測(cè)試。 它使您可以構(gòu)建類似于可重用POJO bean塊的LEGO。 除了僅處理bean外,Camel還將此注冊(cè)表空間用于許多其他服務(wù)。 例如,您可以使用其他功能和/或配置來自定義許多其他組件端點(diǎn)。 或者諸如線程池策略實(shí)現(xiàn)替換之類的東西。

上面示例中的Route是使用所謂的Java DSL構(gòu)建的。 該路線可讀性強(qiáng),但是您將獲得完整的IDE支持,以瀏覽可用于該路線的所有方法。

我希望本文能幫助您快速開始騎駱駝。 除了提到的timer組件之外, camel-core還從其核心jar中附帶了以下組件。

  • 豆成分
  • 瀏覽組件
  • 數(shù)據(jù)集組件
  • 直接成分
  • 文件組件
  • 日志組件
  • 模擬組件
  • 屬性組件
  • 色達(dá)成分
  • 測(cè)試組件
  • 計(jì)時(shí)器組件
  • 存根組件
  • 驗(yàn)證器組件
  • vm組件
  • xslt組件

玩得開心!

參考: A程序員雜志博客上的JCG合作伙伴 Zemian Deng從Java開始使用Apache Camel 。

翻譯自: https://www.javacodegeeks.com/2013/08/getting-started-with-apache-camel-using-java.html

apache camel

總結(jié)

以上是生活随笔為你收集整理的apache camel_使用Java的Apache Camel入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。