最近几年,ESB软件越来越受欢迎。 如果大多数人通常知道什么是ESB,那么他们很少会清楚地了解这种体系结构的不同组件的确切作用。
例如,Apache ServiceMix由三个主要组件组成:Apache Karaf(OSGI容器),Apache ActiveMQ(消息代理)和Apache Camel。 顺便问一下,骆驼到底是什么? 什么是“ routing and mediation engine
”? 有什么用?
我已经与Camel合作了大约一年,我认为-尽管根本不是Camel专家,但我现在有足够的后见之明,可以使用一些非常具体的示例让您发现Camel的兴趣和力量。为了清楚起见,在本文的其余部分中,我将使用Spring DSL –假设读者熟悉Spring语法。
用例
让我们想象一下,我们想使用Camel实现以下场景。 产品信息请求将以平面文件(CSV格式)的形式发送到特定文件夹中。 该文件的每一行都包含特定客户关于特定汽车型号的单个请求。 我们希望向这些客户发送有关他们感兴趣的汽车的电子邮件。为此,我们首先需要调用Web服务以获取其他客户数据(例如,他们的电子邮件)。 然后,我们必须从数据库中获取汽车特性(让我们说一个文本)。 由于我们希望邮件看起来像样(例如HTML),因此也需要进行小的文本转换。
当然,我们不希望仅对请求进行顺序处理,而是希望引入一些并行性。 同样,我们也不想多次将完全相同的邮件发送给不同的客户(而是将相同的唯一邮件发送给多个收件人)。 利用我们后端的集群功能来平衡对Web服务的调用也将是一件很不错的事情。 最后,在处理请求失败的情况下,我们希望以某种方式跟踪原始请求,以便例如可以通过邮政发送。
一个(可能的)骆驼实现:
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd "
>
<camelContext xmlns="http://camel.apache.org/schema/spring" errorHandlerRef="myDLQ">
<!-- 2 redeliveries max before failed message is placed into a DLQ -->
<errorHandler id="myDLQ" type="DeadLetterChannel" deadLetterUri="activemq:queue:errors" useOriginalMessage="true">