Apache Camel简化SOA实施进程
http://yangzb.iteye.com/blog/494571
Apache Camel简化SOA实施进程
- 博客分类:
- Framework
在过去的几年中,整合技术得到了突飞猛进的发展。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 --> <!-- now lets write messages from the queue to a directory --> </camelContext> <!-- lets configure the default ActiveMQ broker URL --> |
希望这篇文章能够让你真正认识到使用Apache Camel来实现企业应用整合是一件多么实际的事。
Apache Camel简化SOA实施进程相关推荐
- 简化软件集成:一个Apache Camel教程
本文来自于阮一峰,文章主要讲解了构建的流程,每个步骤介绍的较为详细,希望对大家有帮助. 软件很少(如果有的话)存在于信息真空中.至少,这是我们软件工程师可以为我们开发的大多数应用程序做出的假设. 在任 ...
- apache camel_轻量级的开源集成:Apache Camel还是Spring集成?
apache camel 首先,为全面披露信息,在过去的1.5年中, 我一直担任 FuseSource(现为Red Hat) 的顾问,为零售,运输,银行/金融等不同行业的大型和小型公司提供SOA和集成 ...
- 轻量级的开源集成:Apache Camel还是Spring集成?
首先,为全面披露信息,在过去的1.5年中, 我一直担任 FuseSource(现为Red Hat) 的顾问,为零售,运输,银行/金融等不同行业的大型和小型公司提供SOA和集成项目支持.我的专长是使用该 ...
- Apache Camel教程– EIP,路由,组件,测试和其他概念的简介
公司之间的数据交换增加了很多. 必须集成的应用程序数量也增加了. 这些接口使用不同的技术,协议和数据格式. 但是,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支持. 企业集成模式(EI ...
- apache camel_什么时候使用Apache Camel?
apache camel Apache Camel是JVM / Java环境中我最喜欢的开源框架之一. 它可以轻松集成使用多种协议和技术的不同应用程序. 本文介绍了何时使用Apache Camel以及 ...
- 适用于微服务架构的Apache Camel
在知道微服务架构被称为之前,我一直在使用它们. 我曾经使用过由隔离模块组成的管道应用程序,这些模块通过队列相互交互. 从那时起,许多(前)ThoughtWorks专家讨论了微服务. 首先是 Fred ...
- 什么时候使用Apache Camel?
Apache Camel是JVM / Java环境中我最喜欢的开源框架之一. 它可以轻松集成使用多种协议和技术的不同应用程序. 本文介绍了何时使用Apache Camel以及何时使用其他替代方法. 问 ...
- apache camel 相关配置_Apache Camel的Java编程入门指南
Apache Camel是一个非常实用的规则引擎库,能够用来处理来自于不同源的事件和信息.你可以在使用不同的协议比如VM,HTTP,FTP,JMS甚至是文件系统中来传递消息,并且让你的操作逻辑和传递逻 ...
- Spring Boot和Apache Camel
随着软件世界的发展,正在开发更加复杂的系统,这些系统必须相互集成. 它从SOA开始,然后一直到微服务. 骆驼是我想到的第一大集成工具,因为如今的骆驼springboot是一个非常强大的组合. 第一步是 ...
最新文章
- python百度百科api-Python即时网络爬虫:API说明
- SpringBoot+Spring Security验证密码MD5加密
- 大数据项目一般金额多少_大数据分析师年薪一般多少?学什么专业才能从事大数据?...
- 数据传输服务 DTS > 数据迁移 > 同一阿里云账号实例间迁移 > RDS实例间的数据迁移
- 网易身患绝症员工被裁事件背后 年轻一代的辛酸和压力
- [WebAPI] - 使用 Ajax 提交 HTML Form Data 到 WebAPI 的方法
- Linux - Manjaro查看本机IP地址
- 安徽农业大学计算机考研分数线,安徽农业大学考研录取分数线
- mediawiki搭建使用
- 智能手环开发之 实现蓝牙(BLE)基本功能
- 【CS229笔记】协方差矩阵概念快速回顾
- 美团云苏宁云倒下了,他们却顺利突围
- 直方图都看不懂,怎么可能拍出好照片!
- golang consul 观察者watch
- 【百度地图】折线图平面图
- 文件碎片/磁盘碎片的一些知识
- 前后台订单入库调用流程
- 判断对象是否可回收、垃圾回收算法
- 大数据周会-本周学习内容总结010
- 《optimizing software in c++》读书笔记(一)