apache camel_Apache Camel简介

apache camel

Apache Camel是著名的企业集成模式的开源实现。 Camel是一个路由和中介引擎,可帮助开发人员以各种特定于域的语言(DSL)(例如Java,Spring / XML,scala等)创建路由和中介规则。

骆驼用途广泛

Camel使用URI来支持大量的传输和消息传递模型,例如HTTP,JMS,JBI,Mina,SCA,CXF,它还与外部组件和数据格式很好地兼容。 要了解Camel的多功能性,您可以在下面的链接中浏览其支持的组件和URI列表。 http://camel.apache.org/components.html

骆驼易于使用

骆驼允许我们使用同一组API来创建路由并在各个组件之间传递消息。 这使得它非常容易使用

单元测试骆驼轻而易举

单元测试对于编写任何质量代码至关重要。 骆驼使软件开发的基础变得非常容易。 它提供了许多现成的组件,例如CamelContextSupport,camel-guice,camel-test-blueprint,可轻松测试代码。 在以后的文章中会更多。

骆驼的术语/类/接口

端点是交换消息的地方。 它可能是指地址,POJO,电子邮件地址,Web服务uri,队列uri,文件等。在骆驼中,终结点是由实现的终结点接口实现的。 端点被称为路由的东西包装。

CamelContext是所有骆驼应用程序的核心,它代表Camel运行时系统。

  1. 创建camelcontext。
  2. 添加端点或组件。
  3. 添加路由以连接端点。
  4. 调用camelcontext.start()-这将启动所有负责在端点中接收,发送和处理消息的骆驼内部线程。
  5. 最后,在交换和处理所有消息时调用camelcontext.stop()。 这将优雅地停止所有骆驼内部线程和端点。

这是围绕CamelContext对象的薄包装,它负责将交换或消息发送到端点。

组件实际上是一个端点工厂。 由于骆驼支持许多不同种类的资源,因此这些资源中的每一个都有不同种类的端点。 在实际情况下,应用程序不要直接使用组件创建端点。 相反,CamelContext决定实例化哪个组件,然后使用该组件实例创建端点。 因此,在应用程序中,我们将拥有。 CamelContext.getEndpoint(“ pop3://john.smith@mailserv.example.com?password = myPassword”); 现在,在这种情况下,pop3是组件的名称。 CamelContext将所有组件名称与组件类映射,并使用其实例化实例的名称。 一旦拥有了组件的句柄,它就会通过调用实例化端点。 Component.createInstance()方法。

消息表示单个具体消息,即请求,答复或异常。 所有具体的消息类都会影响消息接口,例如JmsMessage类。

交换是消息的容器。 当消费者在路由过程中收到消息时创建。

处理器接口表示处理消息的类。 它包含单个方法public void process(Exchange交换)引发异常。应用程序开发人员可以实现此接口,以便在消费者收到消息时对消息执行业务逻辑。

路由是通过过滤器或路由器通过任意类型的决策,将消息从源逐步移动到目的地。 它们是借助DSL(特定于域的语言)进行配置的。 Java DSL是通过实现routebuilder接口创建的。 它具有一个称为configure()的方法,该方法定义了消息的整个路由。 也可以使用spring通过xml文件配置路由。

骆驼代码的一个小例子。

让我们以一个小例子来说明一下Camel可以做什么。 在此示例中,我们将文件夹中存在的文件组移动到另一个文件夹。 在此过程中,我们将执行以下操作

  1. 签出Camel的依赖项。
  2. 创建一个简单的RouterBuilder。
  3. 在spring文件中注册CamelContext。
  4. 在CamelContext Bean中注入routerbuilder
  5. 通过启动Camelcontext来执行该类,并在执行完成后最终将其停止。

1.依赖关系 –在pom.xml中添加以下依赖关系

<dependency><groupId>org.apache.camel</groupId><artifactId>camel-core</artifactId><version>${camel-version}</version></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-spring</artifactId><version>${camel-version}</version></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-aws</artifactId><version>${camel-version}</version></dependency>

2.创建RouterBuilder –可以通过扩展org.apache.camel.builder.RouterBuilder类并覆盖configure()方法来创建RouterBuilder。 这是一个例子

import org.apache.camel.builder.RouteBuilder;/*** Created by IntelliJ IDEA.* User: Niraj Singh* Date: 7/28/13* Time: 10:29 AM* To change this template use File | Settings | File Templates.*/
public class MyFirstRouterBuilder extends RouteBuilder {@Overridepublic void configure() throws Exception {try{from( "file:d:/vids").to("file:d:/temp");}catch(Exception e){}}
}
  1. From()是源端点,包含骆驼将要轮询的文件或目录的uri。
  2. to()代表目标端点,并包含目标文件或目录的名称。
  3. 文件组件uri的格式为“ file:// nameOfFileOrDirectory ”。

3.在Spring中注册CamelContext并在Spring中注入RouterBuilder。

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"><camelContext id="sqsContext" xmlns="http://camel.apache.org/schema/spring"><routeBuilder ref="myFirstRouter" /></camelContext><bean id="myFirstRouter" class="com.aranin.aws.sqs.MyFirstRouterBuilder"/></beans>

4.启动骆驼上下文并执行代码,然后停止骆驼上下文。

import org.apache.camel.CamelContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;/*** Created by IntelliJ IDEA.* User: Niraj Singh* Date: 4/16/13* Time: 11:21 AM* To change this template use File | Settings | File Templates.*/
public class CamelHello {public static void main(String args[]) throws Exception {try {ApplicationContext springcontext = new FileSystemXmlApplicationContext("D:/samayik/awsdemo/src/main/resources/hellocamel.xml");CamelContext context = springcontext.getBean("firstCamelContext", CamelContext.class);context.start();Thread.sleep(10000);context.stop();} catch ( Exception e ) {System.out.println(e);}}
}

如果您运行此类,则首先我们从spring config文件中加载camelcontext。 在其中注入路由器生成器。 上下文启动后,然后将源目录中的所有文件复制到目标目录。 复制完所有文件后,尝试将新文件复制到源目录,在这种情况下,上下文运行10000 ms之前,该文件也将复制到目标文件。

我没有更多关于骆驼的高级教程。 也许您会发现它们很有用。 参考部分列出了这些链接。

参考资料

  1. http://camel.apache.org/
  2. http://camel.apache.org/enterprise-integration-patterns.html
  3. http://architects.dzone.com/articles/enterprise-integration
  4. http://weblog4j.com/2013/05/14/amazon-sqs-listening-to-sqs-using-apache-camel-the-spring-dsl-way/
  5. http://weblog4j.com/2013/04/17/amazon-sqs-listening-to-amazon-sqs-queue-using-apache-came l /

就这些了。 尽管没有人会发表评论,但是我还是要坚持不懈,如果您喜欢本教程,仍然请大家排一两行。

温暖的问候

尼拉吉

参考: Weblog4j博客上的JCG合作伙伴 Niraj Singh 对Apache Camel的介绍 。

翻译自: https://www.javacodegeeks.com/2013/08/introduction-to-apache-camel.html

apache camel

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle括号不区分中英,Oracle的sql语句,查询条件加括号与不加括号区别 -

例如:SELECT ename, job, deptnoFROM empWHERE deptno in (10, 20)AND (ename like ‘%I‘ OR job like ‘%ER‘);执行该sql&#xff0c;结果集如下&#xff1a;1 JONES MANAGER 202 CLARK MANAGER 10去掉上面sql查询条件中的括号&a…

Java常用类(3)--Java比较器Comparable、Comparator类

文章目录自然排序&#xff1a;java.lang.Comparable定制排序&#xff1a;java.util.Comparator自然排序&#xff1a;java.lang.Comparable Comparable接口强行对实现它的每个类的对象进行整体排序&#xff0c;这种排序被称为类的自然排序。 实现 Comparable 的类必须实现 com…

Angular5 JWT身份验证(Spring Boot安全性)

欢迎使用带有Spring Security的angular5 jwt身份验证。在本教程中&#xff0c;我们将在一个angular5单页应用程序中使用jwt身份验证创建一个完整的堆栈应用程序&#xff0c;该应用程序具有由spring boot支持并集成了spring security的后备服务器。带有集成了HttpInterceptor的示…

Java常用类(4)--System类

System类代表系统&#xff0c;系统级的很多属性和控制方法都放置在该类的内部&#xff0c;该类位于java.lang包。 由于该类的构造器是private的&#xff0c;所以无法创建该类的对象&#xff0c;也就是无法实例化该类。其内部的成员变量和成员方法都是static的&#xff0c;可以…

创新设计模式:原型模式

原型模式用于创建对象的副本。 这种模式非常有用&#xff0c;特别是当从头开始创建对象的成本很高时。 与builder &#xff0c; factory和abstract factory模式相比&#xff0c;它不会从头开始创建对象&#xff0c;而是会克隆/重新创建它。 与单例模式相比&#xff0c;它创建一…

oracle游标的实例,oracle游标实例

--游标----游标&#xff1a;当在PL/SQL块中执行查询语句和数据操作语句时&#xff0c;oracle会为其分配上下文区&#xff0c;游标是指向上下文区的指针。----显示游标&#xff1a;显示游标在PL/SQL块的声明部分声明&#xff0c;在执行部分或异常处理部分打开游标&#xff0c;提…

Java常用类(5)--不可变的任意精度BigInteger、BigDecimal类

文章目录BigInteger类BigDecimal类BigInteger类 Integer类作为int的包装类&#xff0c;能存储的最大整型值为2^31-1&#xff0c;Long类也是有限的&#xff0c; 最大为2^63-1。如果要表示再大的整数&#xff0c;不管是基本数据类型还是他们的包装类 都无能为力。 java.math包的…

创新设计模式:单例模式

单例设计模式是一种软件设计模式&#xff0c;用于将类的实例化限制为一个对象。 与其他创建设计模式&#xff08;例如抽象工厂 &#xff0c; 工厂和构建器模式&#xff09;相比&#xff0c;单例将创建一个对象&#xff0c;但也将负责&#xff0c;因此该对象只有一个实例存在。…

UNIX下 oracle expdp,Linux服务器下对Oracle数据库expdp(导出)和impdp(导入)

Linux服务器下对Oracle数据库expdp(导出)和impdp(导入)紧接上篇文章&#xff0c;Oracle数据库架构已经创建完成&#xff0c;我的需求是&#xff1a;将老服务器上的数据库迁移到新的数据库上。这就用到impdp(导入)操作。要想实现对新数据库的impdp(导入)工作&#xff0c;首先需要…

Java枚举类(1)--枚举类的定义、方法使用和接口实现

文章目录枚举类的理解枚举类的定义Enum类的主要方法枚举类实现接口枚举类的理解 当类的对象只有有限个&#xff0c;且确定的&#xff0c;称此类为枚举类。 当需要定义一组常量时&#xff0c;强烈建议使用枚举类。 如果枚举类中只有一个对象&#xff0c;则可以作为单例模式的…

java备忘录_Java 8备忘单中的可选

java备忘录Java 8 java.util.Optional<T>是scala.Option[T]和Data.Maybe在Haskell中的较差表亲。 但这并不意味着它没有用。 如果您不熟悉此概念&#xff0c;请将Optional想象为可能包含或不包含某些值的容器。 就像Java中的所有引用都可以指向某个对象或为null &#xf…

IDEA中注解注释快捷键及模板

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 文章目录单行注释多行注释文档注释(块注释)方法说明注解自动注…

从方法返回Java 8的可选项时的注意事项

Java 8引入的Optional类一直是该语言版本引入的最具争议的功能之一。 尽管我喜欢这个新的Java类的东西比不喜欢的东西多&#xff0c;但在Java方法中将其用作return类型时&#xff0c;需要考虑一些事情。 我将在本文中讨论其中的一些问题&#xff0c;但不会讨论有关是否应该将Op…

oracle账户解锁28000,oracle 下载 账号密码ORA-28000账户被锁和解锁

今天测试库有个账户的密码忘了&#xff0c;试了十几次就开始提示&#xff1a;ERROR:ORA-28000: the account is locked意思明显就是账户被锁了&#xff0c;可能是用户的资源设置中对密码重试次数做了限制。验证&#xff1a;SQL> select a.username, b.profile, b.resource_n…

让别人和自己看懂自己的程序代码?一文掌握Java单行多行、文档注释以及注解(Annotation)超详细的理解使用,IDEA注释注解快捷键和模板,提高程序代码更有可读性

文章目录单行和多行注释文档注释&#xff08;Java特有&#xff09;Annotation(注解)的理解常见的Annotation示例IDEA注释注解快捷键及模板自定义 AnnotationJDK 中的元注解单行和多行注释 注释的内容不参与编译&#xff0c;即编译以后的.class的字节码文件中不包含注释的内容。…

Java集合(1)--集合概述

Java 集合可分为 Collection 和 Map 两种体系 Collection接口&#xff1a;单列数据&#xff0c;定义了存取一组对象的方法的集合 ——List&#xff1a;元素有序、可重复的集合 ——Set&#xff1a;元素无序、不可重复的集合 Map接口&#xff1a;双列数据&#xff0c;保存具有…

win7下oracle10g安装,专门针对win7下oracle10g安装的详解

Window 7 下面安装Oracle 10g今在win7下安装oracle 10g client的时候遇到下面问题&#xff1a;在执行先决条件的时候&#xff0c;报目前只支持6.0的版本&#xff0c;修改oraparam.ini文件中的以下内容&#xff1a;[Certified Versions]#You can customise error message shown …

Java集合(2)--Collection接口方法

1、添加 add(Object obj)addAll(Collection coll)2、获取有效元素的个数 int size()在这里插入代码片3、清空集合 void clear()4、是否是空集合 boolean isEmpty()5、是否包含某个元素 boolean contains(Object obj)&#xff1a;是通过元素的equals方法来判断是否是否同一个…

java核心面试_Java核心面试问题

java核心面试问&#xff1a;如果main方法被声明为私有该怎么办&#xff1f; 回答&#xff1a; 该程序可以正确编译&#xff0c;但在运行时会显示“ Main方法不公开”。 信息。 问&#xff1a;在Java中按引用传递和按值传递是什么意思&#xff1f; 回答&#xff1a; 通过引用…

oracle sql条件语句,谁能介绍下Oraclesql之条件语句?

一IF。。THENIFconditionTHENstatements1;statements2;。。。。ENDIF;二IF。。THEN。。。ELSEIFconditionTHENstatements1;statements2;。 。。。ELSEstatements1;statements2;。。。。ENDIF;三IF。。THEN。。ELSIFIFcondition1THENstatement1;ELSIFcondition2THENstatement2;…