`
yangzb
  • 浏览: 3506983 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache Camel简化SOA实施进程

阅读更多

  在过去的几年中,整合技术得到了突飞猛进的发展。XML /REST /Web 服务/面向服务架构(SOA)的革命不断的促使工程师们和软件公司去创造丰富的协议、适配器、传输器、容器、标准,最佳实践···应有尽有。

  无可否认的,现有的这些代码是非常复杂的、多样化的,几乎没有什么它们不可以做到的事情。但这些软件包都是从技术上来建立的,从而使得如何有效的使用其功能成为了读者很大的挑战。

  目前,众多读者都完成了这一项挑战。丰富的经验和成千上万的成功案例促进了许多基础架构设计模式定义的形成,从而帮助开发者在整合时能够开门见 山,少走弯路。其中,有一套设计模式在业界引起了注意,那就是Hohpe 和 Woolf's企业整合模式。这些模式包含了一些技术上无关的词汇来描述大量整合的解决方案。他们并不是侧重于低层次的编程,而是采取自上而下的方案来开 发一个异步的、以信息为基础的架构。

  一致的词汇是很好的,而易于使用的框架在实际建立基础架构的时候岂不是更好吗?

  这正是Apache 的开源Camel项目背后的理念。现在,行之有效的并且真实的一套模式已可以获得了,很明显,下一步就是要去创造一个能够以最简单的方式来实施这个模式的驱动器。

  Camel 是一个代码先行的工具,它允许开发者在无须学习厂商定制和复杂的底层技术的情况下进行精密的大规模集成。Camel使用Java 领域说明性专用语言来连接信息系统和配置路由和调解规则,在POJO基础上实施企业整合模式。这样,就能使得开发人员不必阅读一页又一页的诸如JMS 或JBI之类的技术规范,也不用处理较低级别的Spring框架就可以直接设计和建立面向服务架构(SOA)。

  Apache Camel是从Apache其他项目尤其是Apache ActiveMQ 以及Apache ServiceMix的代码和灵感有机的衍生出来的。该项目的成员们发现:人们在许多不同的情况下都想要建立或是使用企业集成模式书中的模式。因 此,Camel团队就这样明确的目的开始建立这样的框架。

  Camel 概况:

  建立Camel的第一步是解偶底层框架中的模式。一些人想要利用企业服务总线(ESB )中的模式,还有一些人则选择Message Broker中的模式,而其他人需要使用应用程序自身的模式或信息提供者间进行对话。仍然有一些人想要在Web服务 框架下或是其他沟通平台上使用。比起将此路由代码与特定的Message Broker或企业服务总线(ESB)绑定来说,Camel选择提取此代码作为独立的框架, 这样一来它就能被应用到任何的项目中去。Camel有一个脚本――不管是在Servlet , 或是Web服务包中,全面企业服务总线(ESB),还是信息应用程序中,任何地方都可以做到重新利用。

  Camel的最初也是主要的优势在于开发团队无须为了连接系统在容器上下功夫。很多人会认为从容器上下功夫是一个正确的途径,甚至是当成对勇气 的考验,但对于越来越多的团队来说这些阻碍成为了不必要的障碍。有了Apache Camel,开发人员就能在完成任务的过程中将无关的任务减少到最低。如果其他要求得到保证的话,Camel还可以在JBI容器中实施,但这并不是必要 的。

  为了简化编程,Camel还支持特定的Java和XML域语言,使得企业集成模式你那个在所有的Java IDE 或Spring XML中使用。这种更高层次的提取能更有效的解决问题。

  Camel重新利用了许多Spring 2 的特性,如说明性交易,控制配置倒置,以及众多为了与JMS和JDBC,Java Persistence API (JPA)结合工作的实用层面的东西。这提高了抽取的水平,简化了编程,减少了需要编写的XML,但如果人们要是追根究底花些功夫的话,也会发现其实 Camel仍然暴露了线级访问。

  Camel示例

  我们分别解释不同的方式实现Apache Camel的配置,首先将使用Java DSL(领域特定语言),接下来是Spring XML配置。

  Java DSL 配置

  如下的列子就是实现了当你想在一个目录结构中从JMS对列里得到信息。首先,我们需要创建一个CamelContext对象:

  CamelContext context = new DefaultCamelContext();

  这里远不止一种方法向CamelContext添加组件。你也可以在我们创建好路由之后再添加组件,正如一下示例所示:

 

context.addRoutes(new RouteBuilder() {
  public void configure() {
  from("test-jms:queue:test.queue").to("file://test");
  // set  up a listener on the file component
  from("file://test").process(new Processor() {
  public void process(Exchange  e) {
  System.out.println("Received exchange: " + e.getIn());
  }
  });
  }
  });

  或者明确的加入JMS组件,如下所示:  

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
  // note we can explicity name the component
  context.addComponent("test-jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));

  下次你必须要启动Camel context。如果你使用Spring去配置Camel context这将会为你实现自动化过程,如果你是使用纯Java的话那就必须用先调用start()的方法:

  camelContext.start();

  这将启动所有的配置路由规则。

  当我们完全启动CamelContext后我们可以输入一些对象至Camel。

  在通常的使用中,更多的情况往往是通过一些功能组件,外部系统将一些信息或是事件直接输入到Camel中,但是在这里我们将使用CamelTemplate,这也是一个最简单的方法用以测试之前的配置是否正确。

  CamelTemplate template = new CamelTemplate(context);

  这时我们可以使用CamelTemplate通过JMS发送一些测试消息:  

for (int i = 0; i < 10; i++) {
  template.sendBody("test-jms:queue:test.queue", "Test Message: " + i);
  }

   我们从CamelTemplate中发送对象(此时通常为文本对象)纳入CamelContext中并提供给测试组 件:jms:queue:test.queue。这些文本对象会自动修改进JMS信息中,并在JMS对列中以test.queue张贴出来。当我们创建好 路线我们配置好FileComponent去接收test.queue。

  FileComponent文件将从对列中提取信息并保存在一个名为test的目录中。每一条信息都会存放在一个与其目的地或是信息ID相对应的文件中。

  最后,我们配置自己的listener并从FileComponent获得通知,以文本的形式打印出来。

  Spring XML配置

  这个示例将使用Spring XML配置实现文件的转换,利用XQuery从目录中将结果发送至JMS 对列。它从目录中选取文件进行解析,然后使用XQuery进行转换,再发送至消息对列。当然,为了更清楚的看到生成文件,我们也会有一些别的方法去从 JMS对列中选取内容再写到一个输出目录中。

  运行示例

  让我们用Camel Maven插件来运行这段示例。举例来说,通过开源软件的源代码版或可执行版即可实现以下操作:  

cd examples/camel-example-spring-xquery
  mvn camel:run

  你现在应该可以看到在target/outputFiles目录下所生成的文件内容,这就是从JMS对列中所读出的转化信息。

  代码走查

  需要做的是用那些定义在类下的 META-INF/spring/camelContext.xml文件正常启动Spring应用。这是应用Camel的XML配置进行配置CamelContext的规范Spring XML文档。

  请务必注意这段XML示例文件底部,我们明确的配置了ActiveMQ组件以及关于如何连接代理的详细内容。

  关键的Spring XML代码内容如下所示:

 

<camelContext useJmx="true" xmlns="http://activemq.apache.org/camel/schema/spring">

   <!-- lets parse files, transform them with XQuery and send them to JMS -->
   <route>
     <from uri="file:src/data?noop=true"/>
     <to uri="xquery:myTransform.xquery"/>
     <to uri="jms:MyQueue"/>
   </route>

   <!-- now lets write messages from the queue to a directory -->
   <route>
     <from uri="jms:MyQueue"/>
     <to uri="file:target/outputFiles"/>
   </route>

</camelContext>

<!-- lets configure the default ActiveMQ broker URL -->
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
   <property name="connectionFactory">
     <bean class="org.apache.activemq.ActiveMQConnectionFactory">
       <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
     </bean>
   </property>
</bean> 

  希望这篇文章能够让你真正认识到使用Apache Camel来实现企业应用整合是一件多么实际的事。

分享到:
评论

相关推荐

    Apache Camel中文开发使用指南.zip

    Apache Camel 是一个强大的开源框架,专门用于构建企业级应用程序中的集成解决方案。它提供了一种声明式的方式,使得开发者可以轻松地定义数据路由和处理规则,从而实现系统间的通信。这个"Apache Camel 开发使用...

    ApacheCamel-JDBC

    Apache Camel 是一个流行的开源集成框架,它允许开发者以声明式的方式定义路由和转换数据,使得在不同的软件组件之间实现通信变得更加简单。JDBC(Java Database Connectivity)是Java平台中的一个标准API,用于与...

    姜宁-我和Apache Camel这些年/Years of Apache Camel and I

    Apache Camel是Apache软件基金会下的一个开源集成框架,它实现了企业集成模式(Enterprise Integration Patterns,EIP),旨在简化在企业中的应用程序、系统和服务之间的集成工作。Camel支持多种传输协议,如HTTP、...

    简化软件集成:一个ApacheCamel教程

    简化软件集成:一个ApacheCamel教程在本教程中,您将了解集成大型软件的一些最大挑战,以及ApacheCamel如何轻松解决这些难题。在您的软件工程中,您可能至少做了一次以下操作:1.确定应启动数据发送的业务逻辑片段。...

    Apache Camel Developer's Cookbook

    Apache Camel是一种开源的集成框架,其目的在于简化企业应用集成和规则流程的开发。它基于企业集成模式(Enterprise Integration Patterns),使得不同系统之间的消息传递和数据交换变得更加容易。Apache Camel支持...

    Apache Camel 开发指南.rar

    Apache Camel 是一个强大的开源企业级集成框架,它简化了在Java应用程序之间建立复杂的消息传递流程。这个"Apache Camel 开发指南"压缩包包含了丰富的资源,帮助开发者深入理解Camel的各个方面,包括路由表达式、...

    apache camel 集成组件 教程

    Apache Camel 是一个强大的开源消息中间件框架,旨在简化企业级应用中的消息处理逻辑。它提供了一种简单而灵活的方式来定义复杂的路由和数据转换规则。Camel 支持多种传输协议和消息中间件,使得开发者能够轻松地在...

    Apache Camel 框架之---JMS路由.docx

    Apache Camel 框架之 JMS 路由 Apache Camel 框架实现的 JMS 路由是指使用 Apache Camel 框架来实现 Java 消息服务(JMS)的路由。JMS 是一个 Java API,用于在 Java 应用程序之间进行消息传递。Apache Camel 框架...

    05-ApacheCamel-CXF-WebService

    Apache Camel 是一个强大的开源企业集成库,它提供了一种模型化的路由和消息转换方式,使得开发者可以轻松地在各种系统间构建复杂的集成解决方案。CXF 是一个流行的开放源代码服务框架,它支持多种Web服务标准,如...

    ApacheCamel-FTP

    总的来说,Apache Camel FTP 组件是构建基于文件传输的集成解决方案的强大工具,通过其丰富的功能和易于使用的 API,能够简化开发工作,提升系统的可维护性和扩展性。结合提供的示例,你可以深入学习并掌握如何在...

    Java_Apache Camel Spring Boot示例.zip

    Apache Camel是一个流行的开源框架,它简化了企业级集成(EIP,Enterprise Integration Patterns)的实现,允许开发者使用预定义的组件来构建可重用的、灵活的数据路由和中介逻辑。 首先,让我们深入理解Apache ...

    apache-camel-3.7.0_数据同步_

    总之,Apache Camel 是一个强大的数据同步工具,它简化了跨系统的复杂数据交换,提供了丰富的组件、灵活的路由规则和全面的错误处理机制,确保数据同步的稳定和高效。通过深入理解和应用Apache Camel,开发者可以...

    Apache Camel 源码分析.rar

    Apache Camel 是一个强大的开源企业集成库,它提供了一种声明式的方式来定义路由和转换数据,使得构建复杂的分布式系统变得更加简单。Camel 使用一种名为“DSL”(Domain Specific Language)的语法规则,允许开发者...

    01-ApacheCamel-HelloWorld

    Apache Camel 是一个强大的开源集成框架,它允许开发者在各种组件之间路由、转换和处理消息,以构建企业级的集成解决方案。在这个"01-ApacheCamel-HelloWorld"示例中,我们将深入理解如何使用 Camel 实现一个简单的 ...

    Apache Camel框架 HTTP相关的jar包

    Apache Camel 是一个强大的开源集成框架,它允许开发者通过声明式的方式连接不同的系统和服务,实现企业级应用程序的集成。这个框架的核心理念是“企业集成模式”(Enterprise Integration Patterns),它提供了丰富...

    apache camel

    Apache Camel 是一个强大的开源集成框架,它允许开发者在各种企业应用程序之间建立灵活、可重用的数据路由和集成解决方案。这个框架的核心理念是“统一的消息模型”,它提供了多种组件,支持多种协议和数据格式,...

    apache camel 简介

    Apache Camel 是一个强大的开源集成框架,它以规则为基础的路由和中介引擎为核心,实现了企业应用模式(EIP,Enterprise Integration Patterns)的POJO化。这个框架的目的是简化不同系统和服务之间的集成,允许...

    camel-idea-plugin, Apache camel IntelliJ IDEA 插件.zip

    camel-idea-plugin, Apache camel IntelliJ IDEA 插件 Apache camel IDEA插件 IntelliJ IDEA的插件,为代码编辑器提供一组 Apache camel 相关的功能。插件包括:Java,XML,属性或者yaml文件中驼峰终结点的代码完成...

Global site tag (gtag.js) - Google Analytics