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的积木。 除了仅处理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

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

  1. apache camel_使用Java的Apache Camel入门

    apache camel Apache Camel是一个非常有用的库,可以帮助您处理来自许多不同来源的事件或消息. 您可以通过许多不同的协议(例如在VM,HTTP,FTP,JMS甚至DIRECTORY ...

  2. Apache Camel入门

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

  3. Apache Camel入门教程

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

  4. apache camel 相关配置_Apache Camel的Java编程入门指南

    Apache Camel是一个非常实用的规则引擎库,能够用来处理来自于不同源的事件和信息.你可以在使用不同的协议比如VM,HTTP,FTP,JMS甚至是文件系统中来传递消息,并且让你的操作逻辑和传递逻 ...

  5. apache camel_Apache Camel入门

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

  6. 架构设计:系统间通信(36)——Apache Camel快速入门(上)

    1.本专题主旨 1-1.关于技术组件 在这个专题中,我们介绍了相当数量技术组件:Flume.Kafka.ActiveMQ.Rabbitmq.Zookeeper.Thrift .Netty.DUBBO等 ...

  7. Apache Camel 2.18 –即将推出的功能的亮点

    骆驼骑士正在忙于即将发布的Apache Camel 2.18版本. 当我们动态更新发行说明时 ,这是一种快速查看即将发生的情况的方法. 我只是想在夏天在这里进行快速更新,到目前为止,我们已经完成了简短 ...

  8. Apache Camel日志组件示例

    Apache Camel日志组件示例 您要将消息记录到底层的记录机制,请使用骆驼的log:组件. Camel使用sfl4j作为记录器API,然后允许您配置记录器实现. 在本文中,我们将使用Log4j作 ...

  9. Apache Camel是个什么玩意?

    初探Apache Camel Apache Camel 是基于EIP(Enterprise Integration Patterns)的一款开源框架.适用于异构系统间的集成和处理数据. 核心 Came ...

最新文章

  1. WMI技术介绍和应用——VC开发WMI应用的基本步骤
  2. Spring Boot集成持久化Quartz定时任务管理
  3. PHP 免费视频教程
  4. 重构碎片化知识_day22重构力-思维导图:让碎片化知识的零存整取
  5. html 图片行内剧中,HTML入门(转义字符、行内样式和块级元素、定位、锚点、跑马灯标签、图片标签、表格标签的讲解)...
  6. 一种情感判别分析体系在汽车品牌舆情管理中的应用
  7. github出现Your account has been flagged.导致账号无法公开的解决办法
  8. socket编程---SCTP
  9. 通信原理实践(五)——2PSK 与2DPSK 通信系统
  10. 编程之美--数组中的最长递增子序列(LIS longest increasement sequence)
  11. 怎么注销百度云服务器账号,百度网盘怎么注销账号?账号注销方法一览
  12. 7-139 手机话费
  13. Matlab中filter.m和filtfilt.m函数C语言实现
  14. 篮球图片html页面代码,教你用PS制作一个非常逼真的篮球图片
  15. iPhone手机怎么打开开发者模式?iPhone手机如何测试uni-app HBuilder
  16. Linux Debian 系统的单网卡绑定多个IP地址的操作步骤
  17. 饶毅:我为什么用了九年才获得博士学位?
  18. VMware ESXi启动卡在 vmkibft loaded successfully
  19. 论文简读《视听觉深度伪造检测技术研究综述》
  20. 谷歌AI版“你画我猜”背后是什么样的原理?

热门文章

  1. ‘entityManagerFactory‘ that could not be found
  2. 作为 IT 行业的过来人,你有什么话想对后辈说的?2
  3. 简单解决“无法打开内核设备:\\Global\\vmx86”错误
  4. c++ 前缀 变量命名_前缀命名
  5. jdk 8 时区 转换_使用JDK 8将收藏转换为地图
  6. aws ecr_在ECR上推送Spring Boot Docker映像
  7. cov/cor中有遗漏值_协调遗漏的效果–使用简单的NIO客户端/服务器测量回送延迟...
  8. jdbc select语句_SELECT语句使用JDBC和Hibernate批量获取
  9. 如何在黄瓜中进行后端测试
  10. vert.x_选择Vert.x的3个理由