mule esb 集成_集成框架比较– Spring集成,Mule ESB或Apache Camel

mule esb 集成

公司之间的数据交换增加了很多。 必须集成的应用程序数量也增加了。 这些接口使用不同的技术,协议和数据格式。 然而,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支持

JVM环境中提供了三个可满足这些要求的集成框架: Spring Integration,Mule ESB和Apache Camel 。 它们实现了众所周知的企业集成模式(EIP, http://www.eaipatterns.com ),因此提供了标准化的,特定于领域的语言来集成应用程序。

这些集成框架几乎可以在JVM环境中的每个集成项目中使用-无论使用哪种技术,传输协议或数据格式。 所有集成项目都可以以一致的方式实现,而无需冗余的样板代码。
本文比较了这三种选择,并讨论了它们的优缺点。 如果您想知道何时使用更强大的企业服务总线(ESB)而不是这些轻量级集成框架之一,那么您应该阅读以下博客文章: http : //www.kai-waehner.de/blog/2011 / 06/02 / when-to-use-apache-camel / (说明了何时使用Apache Camel,但标题也可能是“何时使用轻量级集成框架”)。

比较标准

可以使用几个标准来比较这三个集成框架:

  • 开源的
  • 基本概念/架构
  • 可测性
  • 部署方式
  • 人气度
  • 商业支持
  • IDE支持
  • 错误处理
  • 监控方式
  • 企业准备
  • 领域特定语言(DSL)
  • 接口,技术和协议的组件数
  • 可扩展性

相似点

这三个框架都有很多相似之处。 因此,上述许多比较标准都是均匀的! 所有这些都实现了EIP,并提供了一致的模型和消息传递体系结构以集成多种技术 。 无论您必须使用哪种技术,都始终以相同的方式进行操作,即相同的语法,相同的API,相同的自动测试。 唯一的区别是每个端点的配置(例如,JMS需要队列名称,而JDBC需要数据库连接URL)。 IMO,这是最重要的功能。 每个框架使用不同的名称,但是想法是相同的。 例如,“骆驼路径”等效于“ M流”,“骆驼组件”在Spring Integration中称为“适配器”。
此外,还存在其他一些相似之处,与重量级ESB不同。 您只需要在类路径中添加一些库即可。 因此,您可以在JVM环境中的任何地方使用每个框架。 无论您的项目是Java SE独立应用程序,还是要将其部署到Web容器(例如Tomcat),JEE应用程序服务器(例如Glassfish),OSGi容器甚至云中,都可以。 只需添加库,进行一些简单的配置,即可完成。 然后,您可以开始实施集成工作(路由,转换等)。

这三个框架都是开源的,并提供熟悉的公共功能,例如源代码,论坛,邮件列表,问题跟踪和对新功能的投票。 好的社区可以编写文档,博客和教程(IMO Apache Camel拥有最引人注目的社区)。 对于这三本书,只有已发行书籍的数量会更好。 可以通过不同的供应商获得商业支持:

  • Spring集成:SpringSource( http://www.springsource.com )
  • Mule ESB:MuleSoft( http://www.mulesoft.org )
  • Apache Camel:FuseSource( http://fusesource.com )和Talend( http://www.talend.com )

IDE的支持非常好,即使视觉设计师也可以使用这三种方法来解决集成问题(并让他们生成代码)。 每个框架都适合企业使用,因为所有框架都提供必需的功能,例如错误处理,自动测试,事务,多线程,可伸缩性和监视。

差异性

如果您知道这些框架之一,则由于它们的概念相同和许多其他相似之处,您可以轻松地学习其他框架。 接下来,让我们讨论它们的区别,以便能够决定何时使用哪一个。 两个最重要的区别是支持的技术数量和使用的DSL。 因此,以下我将特别关注这两个标准。 在所有示例中,我将使用代码片段来实现众所周知的EIP“基于内容的路由器”。 自己判断,选择哪个。

Spring整合

Spring Integration基于著名的Spring项目,并通过集成支持扩展了编程模型。 您可以像在其他Spring项目中一样使用Spring功能,例如依赖项注入,事务或安全性。

如果您已经有一个Spring项目并且需要添加一些集成的东西,那么Spring Integration非常棒。 如果您了解Spring本身,那么几乎不需要学习Spring Integration。 尽管如此,Spring Integration仅对技术提供非常基本的支持-只是“基本的东西”,例如文件,FTP,JMS,TCP,HTTP或Web服务。 Mule和Apache Camel提供了许多更多的组件!
可以通过编写许多XML代码(没有真正的DSL)来实现集成,如下面的代码片段所示:

<file:inbound-channel-adapterid=”incomingOrders”directory=”file:incomingOrders”/><payload-type-router input-channel=”incomingOrders”><mapping type=”com.kw.DvdOrder” channel=”dvdOrders” /><mapping type=”com.kw.VideogameOrder”channel=”videogameOrders” /><mapping type=”com.kw.OtherOrder” channel=”otherOrders” /></payload-type-router><file:outbound-channel-adapterid=”dvdOrders”directory=”dvdOrders”/><jms:outbound-channel-adapterid=”videogamesOrders”destination=”videogameOrdersQueue”channel=”videogamesOrders”/><logging-channel-adapter id=”otherOrders” level=”INFO”/>

您还可以对某些内容使用Java代码和注释,但是最后,您需要大量XML。 老实说,我不太喜欢XML声明。 它适用于配置(例如JMS连接工厂),但不适用于复杂的集成逻辑。 至少,它应该是具有更好可读性的DSL,但是更复杂的Spring Integration示例确实很难阅读。
此外,Eclipse的可视化设计器(称为集成图)还可以,但不如其竞争者那么直观好。 因此,如果我已经有一个现有的Spring项目,并且仅添加一些仅需要“基本技术”(例如文件,FTP,JMS或JDBC)的集成逻辑,就只能使用Spring Integration。

ule子ESB

顾名思义,Mule ESB是一个完整的ESB,包括几个附加功能,而不仅仅是一个集成框架(您可以将其与基于Apache Camel的ESB的Apache ServiceMix进行比较)。 尽管如此,Mule也可以用作轻量级的集成框架-只需不添加和使用EIP集成之外的任何其他功能。 作为Spring Integration,Mule仅提供XML DSL。 在我看来,至少它比Spring Integration更容易阅读。 Mule Studio提供了非常出色且直观的视觉设计师。 将以下代码片段与上面的Spring集成代码进行比较。 它比Spring Integration更像DSL。 如果集成逻辑更复杂,则这很重要。

<flow name=”muleFlow”><file:inbound-endpoint path=”incomingOrders”/><choice><when expression=”payload instanceof com.kw.DvdOrder”evaluator=”groovy”><file:outbound-endpoint path=”incoming/dvdOrders”/></when><when expression=”payload instanceof com.kw.DvdOrder”evaluator=”groovy”><jms:outbound-endpointqueue=”videogameOrdersQueue”/></when><otherwise><logger level=”INFO”/></otherwise></choice>
</flow>

Mule的主要优点是与重要专有接口的一些非常有趣的连接器,例如SAP,Tibco Rendevous,Oracle Siebel CRM,Paypal或IBM的CICS交易网关 。 如果您的集成项目需要其中一些连接器,那么我可能会选择Mule!

对于某些项目而言,缺点是Mule对OSGi拒绝: http : //blogs.mulesoft.org/osgi-no-thanks/

阿帕奇骆驼

Apache Camel与Mule几乎相同。 它为您可能想到的几乎每种技术提供了许多组件(甚至比Mule还要多)。 如果没有可用的组件,则可以从Maven原型开始很容易地创建自己的组件! 如果您是Spring的人:Camel也具有很棒的Spring集成。 与其他两个一样,它提供了XML DSL:

<route><from uri=”file:incomingOrders”/><choice><when><simple>${in.header.type} is ‘com.kw.DvdOrder’</simple><to uri=”file:incoming/dvdOrders”/></when><when><simple>${in.header.type} is ‘com.kw.VideogameOrder’</simple><to uri=”jms:videogameOrdersQueue”/></when><otherwise><to uri=”log:OtherOrders”/></otherwise></choice></route>

可读性优于Spring Integration,并且几乎与Mule相同。 此外,FuseSource还提供了一个很好的(但商业化的)可视化设计器Fuse IDE,它可以生成XML DSL代码。 尽管如此,无论您使用可视设计器还是仅使用XML编辑器,它都是很多XML。 我个人不喜欢这样。

因此,让我们向您展示另一个很棒的功能: Apache Camel还提供了Java,Groovy和Scala的DSL 。 您不必编写太多难看的XML。 就个人而言,我更喜欢使用这些流利的DSL之一而不是XML进行集成逻辑。 我只使用XML做配置工作,例如JMS连接工厂或JDBC属性。 在这里,您可以看到使用Java DSL代码段的相同示例:

from(“file:incomingOrders “).choice().when(body().isInstanceOf(com.kw.DvdOrder.class)).to(“file:incoming/dvdOrders”).when(body().isInstanceOf(com.kw.VideogameOrder.class)).to(“jms:videogameOrdersQueue “).otherwise().to(“mock:OtherOrders “);

流利的编程DSL非常易于阅读(即使在更复杂的示例中也是如此)。 此外,这些编程DSL比XML具有更好的IDE支持(代码完成,重构等)。 由于这些很棒的流利的DSL,如果我不需要Mule的某些出色的连接器来连接专有产品,我将始终使用Apache Camel。 由于它与Spring的集成非常好,因此在大多数用例中,我甚至更喜欢Apache Camel而不是Spring Integration。

顺便说一句:Talend提供了一个可视化设计器来生成Java DSL代码,但是它会生成大量样板代码,并且反之亦然(即您无法编辑生成的代码)。 这是一个不可行的标准,必须尽快解决(希望如此)!

最终获胜者是…

…所有这三个集成框架,因为它们都是轻量级的,并且易于使用-即使对于复杂的集成项目也是如此。 始终使用相同的语法和概念来集成几种不同的技术真是太棒了–包括非常好的测试支持。

个人最喜欢的是Apache Camel,这是因为它具有出色的Java,Groovy和Scala DSL ,并结合了许多受支持的技术。 仅当我需要专有产品的某些独特连接器时,才使用Mule。 如果仅需要集成“基本技术”,例如FTP或JMS,则仅在现有的Spring项目中使用Spring Integration。 尽管如此:无论您选择这些轻量级集成框架中的哪个,都可以通过轻松的工作轻松实现复杂的集成项目,这将带来很多乐趣。 切记:繁琐的ESB通常具有太多的功能,因此也有太多不必要的复杂性和工作量。 使用正确的工具完成正确的工作!

参考: 被宠坏的选择:使用哪种集成框架– Spring Integration,Mule ESB或Apache Camel? 来自我们的JCG合作伙伴   关于Java EE / SOA /云计算博客的Blog的 Kai Wahner。


翻译自: https://www.javacodegeeks.com/2012/03/integration-framework-comparison-spring.html

mule esb 集成

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

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

相关文章

盘点关于程序员的那些经典案例

深度剖析几个经典话题&#xff0c;以图文的形式展现&#xff0c;好好看图。 目录 1. 2014互联网职场薪酬报告&#xff01;你拖后腿了吗&#xff1f; 2. 月薪8K程序员现身说法&#xff1a;男人就该默默做技术&#xff01; 3.项目建设 4. 2014年亿级用户下的新浪微博平台架构…

html中文字过长 自动隐藏,css 实现文字过长自动隐藏功能

单行overflow: hidden;text-overflow: ellipsis;white-space: nowrap;多行(兼容各个浏览器)//通过覆盖最后几个字的形式p{position:relative;line-height:1.4em;height:4.2em;/* 3 倍line-height 多少倍就是多少行*/overflow:hidden;}.p::after {content:"...";font-…

写博客和生产api的工具

前言&#xff1a; .不要乱管闲事 写博客&#xff1a; 印象中是叫writeAlive之类的工具&#xff1b; 生产api的&#xff1a; 似乎叫hignLight的工具&#xff1b;转载于:https://www.cnblogs.com/zhangzs000/p/5273346.html

使用Xtext为Eclipse和IntelliJ开发DSL

在这篇文章中&#xff0c;我们将看到如何开发一种简单的语言。 我们的目标是&#xff1a; 语言的解析器 IntelliJ的编辑器 。 编辑器应具有语法突出显示&#xff0c;验证和自动完成功能 我们还将免费提供Eclipse和Web编辑器的编辑器 &#xff0c;但请包含您的兴奋之处&#…

搬家后第一次缴电费,查询客户编号的解决办法

最近搬家后&#xff0c;发现家里停电了&#xff0c;不知道客户编号&#xff0c;想通过支付宝生活缴费模块充值。 解决办法。 1.走到电表跟前&#xff0c;连续按下电表白色按钮4-5下。会出现一个四位数的阿拉伯数字。比如&#xff1a;0088。取&#xff0c;后两位88。 2.再按一下…

html字符实体标签语法,HTML字符实体与文本格式化标签

HT环行进端处触码通法果泉位可近境其行框理发ML 字符实体/HTML 中的预留字符必须被替换为字符实体&#xff0c;一些在键盘上找不到的字符也可以使用字符实体来览页些求时是过解些这确如目前例总站回广随能4果泉时标配使能幻近器面实的我是接,前些模小架端如结的事告机对8和水兼…

JavaScript学习总结(思维导图篇)

不管是前端开发还是后端开发,js一直担任着重要的角色。需要深刻理解,才能把工作做得更加出色。 目录 JavaScript BOM对象 JavaScript Dcoument对象 JavaScript 事件处理 JavaScript变量 JavaScript函数基础

ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题

ArcGIS API for Silverlight地图加载众多点时&#xff0c;使用Clusterer解决重叠问题 原文:ArcGIS API for Silverlight地图加载众多点时&#xff0c;使用Clusterer解决重叠问题 问题&#xff1a;如果在地图上加载成百上千工程点时&#xff0c;会密密麻麻&#xff0c;外观不是很…

html 文本框 自动拼接,HTML 中table的结构以及拼接

表格基本上有如下几个标签构成:(1).(2).标签用来创建表格的行。(3).标签用来创建表头单元格。 t-head(4).标签用来创建tr行中的单元格。(5).标签用来创建标题。(6).标签用来创建表格的表头。 (一个table只能有一个)(7).标签用来创建表格的主体部分。(8).标签用来创建表格的页…

大学4年毕业后我是如何还清的助学贷款。

一般的农村大学生,大学期间采用助学贷款的方式修完大学的四年。如何在一两年内还清?这个利息又是如何计算的呢, 目录 我大学欠了多少钱? 大学毕业后要还多少钱? 这个利息如何计算?

谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式

作为一名java工程狮&#xff0c;大家肯定经历过很多面试&#xff0c;但每次几乎都会被问到什么是MVC设计模式&#xff0c;你是怎么理解MVC的类似这样的一系列关于MVC的问题。 【出现频率】 【关键考点】 MVC的含义MVC的结构 【考题分析】  在java Web开发中&#xff0c;存在两…

mvc 一般注释_使用带有注释和JQuery的Spring MVC 3的Ajax

mvc 一般注释与Ajax一起工作对我来说一直很有趣&#xff01; 是不是 &#xff1f; 我将使您轻松将Ajax与Spring MVC 3和JQuery结合使用。 这篇文章将向您说明如何在工业编码的现实生活中使用Ajax。 和往常一样&#xff0c;我们将在Spring MVC 3框架中以Ajax的实际示例为例&…

html中el表达式遍历list,EL表达式在JS中取出来打印[object HTMLDivElement]的问题

今天做项目的时候,要在JS中获取请求参数中的 值,想直接用 ${param.tabName}获取,结果console.debug()打印出来,居然是 [object HTMLDivElement] 类型. 导致无法获取真正的值,原因可能是因为JQ默认把 这个值进行了封装,封装成 HTMLDivElement 对象,导致出问题. 解决办法,就是告…

孙叫兽:我所认为的领导力!

回归领导力的本质&#xff0c;观察反思自己日常的领导力行为&#xff0c;在不断的学习中找到属于自己的最佳答案... 目录 重塑领导力 管理&#xff0c;到底是管人还是管事&#xff1f; 领导力唯一的准则是没有准则 改变自己就能改变公司&#xff1f; 成功的战略10%制定90%执…

WildFly管理控制台已更新–请求反馈

红帽JBoss企业应用程序平台&#xff08;EAP&#xff09;和WildFly具有共生关系 。 简而言之&#xff0c;红帽JBoss企业应用程序平台&#xff08;JBoss EAP&#xff09;保留了WildFly社区项目&#xff08;以前称为JBoss Application Server&#xff09;的所有创新。 但是只有JBo…

web.xml上监听器作用

<!--Spring ApplicationContext 载入 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 使Spring支持request与session的scope,如:<bean id"log…

win7远程多用户登录此计算机无法,win7如何实现远程桌面多用户登录|win7实现多用户登录远程桌面的方法...

Win7系统自带有远程桌面功能&#xff0c;开启远程桌面可以控制其他电脑&#xff0c;一般远程登录桌面时&#xff0c;即使登录的是不同的管理账号&#xff0c;还是会把远程登录的人给记下来&#xff0c;不同的账号只能同时存在一个会话窗。那么win7如何实现远程桌面多用户登录&a…

饿了么薅羊毛时刻正式开启

随着信息化时代的来临&#xff0c;我们的生活方式更加的方便快捷。随着外卖行业的发展&#xff0c;我们不用踏出家门就可以吃到热乎的饭菜了。我们网上点餐都是通过外卖app来进行点餐的&#xff0c;现在的外卖app主要要饿了么、美团外卖等等。有时候外卖平台也会推出一些优惠活…

500个运营工具大全,速度收藏!!!

500个运营工具大全! 目录 综合性平台: 运营、营销、广告类型平台: 创业资讯类

ajax修改按钮的html值,ajax - 在yii 1中使用ajax根据选定的单选按钮选项更新html字段值 - 堆栈内存溢出...

我是yii和ajax的新手。 在这里&#xff0c;我试图基于相同表单中选中的单选按钮选项来更新表单值。 我可以创建一个ajax调用&#xff0c;并在另一个div中呈现值。 但我仍然不知道如何传递该值以供查看。如下所示&#xff0c;这是单选按钮&#xff0c;根据选定的单选选项发送aja…