apache camel

Apache Camel是一个非常有用的库,可以帮助您处理来自许多不同来源的事件或消息。 您可以通过许多不同的协议(例如在VM,HTTP,FTP,JMS甚至DIRECTORY / FILE之间)移动这些消息,但仍然使处理代码没有传输逻辑。 这样,您就可以专注于摘要消息的内容。

在这里,我将提供一个教程,介绍如何使用Java而不是Groovy来开始使用Apache Camel。

让我们首先创建一个Maven项目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 ,它实际上包含许多您可能会使用的有用组件。 同样出于记录目的,我添加了一个slf4j-simple作为记录器实现,因此我们可能会在控制台上看到输出。

接下来,您只需要一个类即可构造RouteRoute就像是对骆驼的指令定义,关于如何将消息从一个点移动到另一个点。 我们将创建src/main/java/camelcoredemo/TimerRouteBuilder.java文件,该文件src/main/java/camelcoredemo/TimerRouteBuilder.java生成一次计时器消息,然后传递给简单地对其进行记录的处理器。

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);}});}
}

这就是您开始所需要的。 现在您可以构建并运行此简单演示。

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

请注意,我们甚至没有编写Java 类,而只是使用org.apache.camel.main.Main选项来接受RouteBuilder类名作为参数。 然后它将自动加载并创建路线。

控制

启动Camel时,它将创建一个CamelContext对象,该对象包含有关如何运行它的许多信息,包括我们创建的Route的定义。 现在,如果您想对此CamelContext进行更多控制,则需要编写自己的Main类。 我会在这里给你看一个简单的例子。

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;}}}
}

如您所见,我们在createRouteBuilder()方法中重新使用了现有的TimerRouteBuilder类。 现在,我们的Main类可以完全控制何时创建,启动和停止CamelContext 。 此上下文使您可以控制如何全局配置骆驼,而不是在Route级别。 javadoc链接提供了您可以探索的所有setter方法。

注意,我们还需要在Main类中提供一些设置代码。 首先,我们需要处理正常关闭,因此我们添加了一个Java关闭挂钩来调用上下文stop() 。 其次,我们需要在上下文启动后添加一个线程块。 原因是CamelContext#start()方法是非阻塞的! 如果您在启动后没有阻塞Main线程,那么它将在紧随其后退出,将没有太大用处。 您想要将Camel作为服务(例如服务器)运行,直到您明确按CTRL+C终止该过程为止。

改进

如果您不想处理很多诸如上述的Main类设置代码,则可以简单地扩展camel-core intead提供的org.apache.camel.main.Main类。 piggy带这个类,您将不仅没有自动设置上下文的功能,而且还可以获得所有其他命令行功能,例如控制运行该进程的时间,启用跟踪,加载自定义路由类等。

重构前面的示例,如下所示。

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();}
}

现在我们的TimerMain2变得更短了,您可以尝试一下,它的功能应与以前相同。

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

注意,我们给了-t选项,它将转储Route跟踪。 使用-h ,您将看到所有可用的选项。

将豆添加到骆驼

在上面的TimerRouteBuilder示例中,我们即时创建了一个Processor 。 现在,如果您要将几个不同的Processor组合在一起,那么将噪音降至最低会更好。 Camel允许您通过在其注册表空间中注册处理Bean来做到这一点,然后只需在路由中将它们作为bean组件进行引用即可。 这是将上述示例转换为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);}}
}

现在您看到我的Route非常狭窄,没有杂波; 并且我已经将处理代码重构为各个类。 当您编写更复杂的Route来解决业务逻辑时,这可以促进更好的代码管理和测试。 它使您可以构建类似于可重用POJO bean块的LEGO。 除了仅处理bean外,Camel还将此注册表空间用于许多其他服务。 例如,您可以使用其他功能和/或配置来自定义许多其他组件端点。 或者诸如线程池策略实现替换之类的东西。

上面示例中的Route是使用所谓的Java DSL构建的。 该路线可读性强,但是您将获得完整的IDE支持,以浏览可用于该路线的所有方法。

我希望本文能帮助您快速开始骑骆驼。 除了提到的timer组件之外, camel-core还从其核心jar中附带了以下组件。

  • 豆成分
  • 浏览组件
  • 数据集组件
  • 直接成分
  • 文件组件
  • 日志组件
  • 模拟组件
  • 属性组件
  • 色达成分
  • 测试组件
  • 计时器组件
  • 存根组件
  • 验证器组件
  • 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

apache camel_使用Java的Apache Camel入门相关推荐

  1. apache camel_在WildFly中将Apache Camel和Spring添加为jboss模块

    apache camel 这些天,我在玩Wildfly , Apache Camel和Spring . 在EAR / WAR之间进行通信的一种简单方法是使用Camel的direct-vm组件. 有或没 ...

  2. apache camel_什么时候使用Apache Camel?

    apache camel Apache Camel是JVM / Java环境中我最喜欢的开源框架之一. 它可以轻松集成使用多种协议和技术的不同应用程序. 本文介绍了何时使用Apache Camel以及 ...

  3. apache.camel_在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

    apache.camel 从历史上看, Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的,就像您今天所做的那样. 下一代代理Apache ActiveMQ A ...

  4. Java开源Apache项目

      Commons-Pool  Commons-Pool 提供了通用对象池接口,一个用于创建模块化对象池的工具包,以及通常的对象池实 更多Commons-Pool信息   Commons-Math  ...

  5. apache camel_Apache Camel入门

    apache camel 在先前的博文中,我们了解了企业集成模式(EIP). 现在,在这篇文章中,我们将研究实现这些模式的Apache Camel框架. 关于骆驼: Apache Camel是一个开放 ...

  6. Apache Camel入门

    在先前的博文中,我们了解了企业集成模式(EIP). 现在,在这篇文章中,我们将研究实现这些模式的Apache Camel框架. 关于骆驼: Apache Camel是一个开放源代码项目,已有将近5年的 ...

  7. Apache Camel入门教程

    Apache Camel入门教程 本文我们学习Apache Camel,介绍基本概念并重点探讨消息路由.从基本概念和术语开始,然后通过介绍两种方式定义路由----java dsl 和 Spring d ...

  8. apache camel_轻量级的开源集成:Apache Camel还是Spring集成?

    apache camel 首先,为全面披露信息,在过去的1.5年中, 我一直担任 FuseSource(现为Red Hat) 的顾问,为零售,运输,银行/金融等不同行业的大型和小型公司提供SOA和集成 ...

  9. apache thrift_使用Java快速入门的Apache Thrift

    apache thrift Apache Thrift是由facebook创建的RPC框架,现在它是一个Apache项目. Thrift允许您在不依赖语言的定义文件中定义数据类型和服务接口. 该定义文 ...

最新文章

  1. 福利 | Python、深度学习、机器学习、TensorFlow 好书推荐
  2. Android_Sqlbrite入门使用
  3. 第九周项目二-我的数组类
  4. mongoDB 介绍(特点、优点、原理)
  5. 供应链金融3.0化解新车流通金融难题
  6. weka使用训练集分类测试集_科学网—使用独立测试集对分类模型进行评估 - 李向东的博文...
  7. [spring boot]idea中实现热部署的方法
  8. 共享单车数据集_共享单车项目数据可视化展示
  9. django 1.8 官方文档翻译:13-12 验证器
  10. linux安装gcc-c++
  11. [导入][转] Eclipse中的快捷键
  12. jQuery焦点图轮播slide插件
  13. Opencv创建纯色图
  14. ios云信不能全屏_ios集成网易云信IM功能遇到的坑
  15. 软件测试大牛成长计划
  16. 企业微信开发(一)网页授权登录
  17. Eclipse下搭建struts、spring、hibernate开发环境
  18. 在网页中调用摄像头实现拍照上传 - 高拍仪二次开发
  19. 一元二次方程组的输入
  20. Java开发已经烂大街,没前途了?假的

热门文章

  1. JQuery AJAX请求结果的null为key时无法进入success方法
  2. [初级]Java中的switch对整型、字符型、字符串的具体实现细节
  3. 深入解析String中的intern
  4. 【Python】urllib爬取动漫图片
  5. JS中的基本和引用类型传递的比较
  6. 2018蓝桥杯省赛---java---B---8(日志统计)
  7. 2017蓝桥杯省赛---java---B---10(k倍区间)
  8. java文件输入与输出_java文件输入和输出
  9. win10系统用户访问ftp服务器被拒绝,关于windows2003下ftp用户名无法访问FTP服务器的问题...
  10. 1分钟学会python_快速入门:十分钟学会Python