apache camel 相关配置_什么时候使用Apache camel

什么时候使用Apache camel

Enterprise Application Integration 企业应用集成(EAI)

企业应用集成是必要的,几乎每家公司都有很多新产品及应用,如何集成这些应用程序是一个问题。来每十年诞生一个新范式,例如客户端/服务器通信,面向服务的架构(SOA)或云计算。

此外,不同的接口或协议和技术的出现。过去数据存储在文件,SQL数据库在今天很通用。有时,还需要NoSQL数据库。同步远程过程调用RPC或异步消息是通过如RMI,SOAP的Web服务,REST或JMS进行通信的。很多软件筒仓还存在。

Enterprise Integration Patterns 企业集成模式(EIP)

当然,你可以推倒重来,然后再写一些意大利面条代码,让应用程序协同工作。不幸的是,你的管理者不会喜欢这个缺少长远眼光的解决方案。

企业集成模式(www.eaipatterns.com)帮助碎片的问题,并使用标准化的方法来集成应用程序。使用相同的概念路由消息来改造。因此,每次有问题时重新发明轮子不是个好主意。

集成的替代方案

解决方案1 :自定义解决方案

实现一个单独的解决方案,适用于您的问题还没有分离切成碎片。此工程可能是最快的替代的小型用例。你必须自己编写所有。维护成本可能会高,特别是如果团队成员改变。

解决方案2:集成框架

使用这类框架有助于将多个集成模式集成在一个标准化的方式。它减少了损耗。每个开发人员会很容易明白你做了什么(如果他知道所使用的架构) 。

解决方案3:企业服务总线(ESB )

应用企业服务总线在您的应用程序集成中。ESB还有更多的功能,如业务流程管理,注册表或业务活动监控。通常,您可以在图形用户界面配置路由实现这些功能 - 通常情况下,一个ESB是一个复杂的产品。学习曲线要高得多。但是提供您一个非常强大的工具。

Apache Camel是什么?

Apache Camel是一个轻量级的集成框架,它实现了所有EIP。因此,您可以使用EIP所需的图案容易地集成不同的应用。您可以使用Java,Spring的XML,scala或Groovy。几乎每一个技术,你可以想像是可用的,例如HTTP,FTP,JMS,EJB,JPA,RMI,JMS,JMX,LDAP的Netty,和很多很多(当然大多数ESB还提供了对他们的支持)。此外,自定义的组件可以很容易地被创建。

您可以部署Apache的骆驼作为独立的应用程序,在Web容器(如Tomcat或Jetty),在JEE应用服务器(如JBoss应用服务器或WebSphere AS),在OSGi环境或与Spring容器组合。

什么时候使用Camel

如果你想多个应用程序使用不同的协议和技术集成,Apache Camel是真棒。除了支持如此多的技术和除了支持不同的编程语言,每个集成使用EIP下的相同概念!无论您使用何种协议。无论您使用什么技术。无论您使用何种领域特定语言( DSL) - 它可以通过Java , Scala, Groovy的或Spring的XML 。做同样的方式。永远!(有一个生产者,消费者,端点endpoint,有EIP概念,有定制处理器参数(如凭据) 。

比如使用Java DSL表达如下:

from(„activeMQ:orderQueue“)..transaction().log(„processing order“).to(mock:“notYetExistingInterface“)

使用Scala DSL:

„file:incomingOrders?noop=true“ process(new TransformationProcessor) to „jdbc:orderDatastore“

如果你是一个开发者,应该能看懂这些意思。

另外两个非常重要的特点是对错误处理(例如使用死信队列)和自动测试的支持。

什么时候不使用Camel

在自己的定制集成,集成框架,企业服务总线这三种方案中不使用Camel,难易程度如下:

如果你要整合一个或两个技术,如读取某个文件或发送JMS消息,使用一些众所周知的库可能是更容易和更快,如Apache Commons IO或Spring JmsTemplate的。但是,请不要总是使用这些helper类,纯文件或try-catch捕捉代码错误的JMS集成是SOOOO难看的!

FuseSource虽然提供商业支持,我不会使用Apache骆驼在非常大的集成项目中。 ESB是在大多数情况下,正确的工具选择。它提供了许多额外的功能,如BPM或BAM 。当然,你也可以使用多个单框架或产品和“创造”自己的ESB ,但是这是在浪费时间和金钱(在我看来) 。

通常情况下,开放源代码解决方案相比商业产品如WebSphere Message Broker更轻量级(你安装此产品的试用版可能需要一两天) !著名的开源ESB有Apache的ServiceMix的,骡子ESB和WSO2 ESB 。顺便说一句:你知道基于Apache Camel框架基础上一些ESB?(如Apache的服务组合和Talend ESB) 。因此,如果你喜欢Apache的骆驼,你也可以使用Apache ServiceMix这样的ESB。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Camel 是一个开源的集成框架,它提供了丰富的组件和路由模式,支持从不同的数据源和协议中获取数据,并将它们转换成目标格式,最终将其路由到目标系统。下面是一个简单的动态路由示例,你可以参考它来配置 Apache Camel。 首先,你需要添加 Apache Camel相关依赖到你的项目中,比如 Maven 依赖: ``` <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> <version>x.x.x</version> </dependency> ``` 接下来,你需要编写一个 CamelContext 的配置文件,比如 routes.xml。在这个文件中,你可以定义路由器、处理器和其他相关组件。这里是一个简单的示例: ``` <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <choice> <when> <simple>${header.type} == 'A'</simple> <to uri="direct:a"/> </when> <when> <simple>${header.type} == 'B'</simple> <to uri="direct:b"/> </when> <otherwise> <to uri="direct:c"/> </otherwise> </choice> </route> <route> <from uri="direct:a"/> <to uri="log:A"/> </route> <route> <from uri="direct:b"/> <to uri="log:B"/> </route> <route> <from uri="direct:c"/> <to uri="log:C"/> </route> </camelContext> ``` 在这个示例中,我们定义了一个路由器,它从 direct:start 开始,根据 header.type 的值动态地路由到不同的处理器中。如果 type 的值为 A,它将被路由到 direct:a;如果值为 B,它将被路由到 direct:b;否则,它将被路由到 direct:c。然后我们定义了三个处理器,它们分别输出 A、B 和 C。 最后,你需要启动你的 CamelContext。你可以在 Spring 中使用 CamelContextFactoryBean 来配置和启动你的 CamelContext,或者在 Java 中使用 CamelContext 的 API。下面是一个简单的 Java 启动示例: ``` CamelContext context = new DefaultCamelContext(); context.addRoutes(new RouteBuilder() { public void configure() { from("direct:start") .choice() .when(header("type").isEqualTo("A")).to("direct:a") .when(header("type").isEqualTo("B")).to("direct:b") .otherwise().to("direct:c"); from("direct:a").to("log:A"); from("direct:b").to("log:B"); from("direct:c").to("log:C"); } }); context.start(); ``` 这样,你就可以使用 Apache Camel 来动态路由你的消息了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值