`
lymalf
  • 浏览: 3169 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Camel中Splitter和Aggregator的使用

阅读更多

最近公司要用camel来切分字符串,然后聚合起来,判断是否处理完成。容器是用的Servicemix。

blueprint.xml

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd" xmlns:ns2="null" xmlns:ns3="null" xmlns:ns4="null" xmlns:ns5="null" xmlns:ns6="null" xmlns:ns7="null">
    
    <bean id="Aggregated" class="com.bosame.TicketCenter.Application.OrderProcedure.Aggregated">
    </bean>

    <bean id="aggregatorStrategy" class="com.bosame.TicketCenter.Application.OrderProcedure.StringAggregationStrategy"/>

    <bean id="OrderSplitBean" class="com.bosame.TicketCenter.Application.OrderProcedure.OrderSplit"></bean>

    <camelContext id="OrderCamel"   xmlns="http://camel.apache.org/schema/blueprint" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
        <route>
            <from uri="vm:ReceiveBatchOrder"/>
            <setHeader headerName="gid">
                <simple>${date:now:HH_mm_ss}</simple>
            </setHeader>
            <split>
                <method bean="OrderSplitBean" method="splitOrders"/>
                <setHeader headerName="gid">
                    <simple>${in.header.gid}</simple>
                </setHeader>
                <to uri="vm:ReceiveOrder"/>
            </split>
        </route>
        <route>
            <from uri="vm:ReceiveOrder"/>
            <to uri="bean:OrderVerifierBean" />
            <aggregate strategyRef="aggregatorStrategy" eagerCheckCompletion="true" completionTimeout="3000">
                <correlationExpression>
                    <header>gid</header>
                </correlationExpression>
                <completionSize>
                    <header>CamelSplitSize</header>
                </completionSize>
                <to uri="bean:Aggregated"/>
            </aggregate>
        </route>
    </camelContext>
</blueprint>

 

这里切分的时候是使用的一个bean对象来切分的,也可以使用正则表达式或者字符串。

就是把"<method bean="OrderSplitBean" method="splitOrders"/>"这个改成"<tokenize token="@"/>",切分的时候就会以"@"来切分。

加入<setHeader headerName="gid">
                <simple>${date:now:HH_mm_ss}</simple>
        </setHeader>
这行代码是为了方便聚合的时候使用,因为camel聚合的时候是根据头部相同的来聚合的。

<correlationExpression>
                    <header>gid</header>
</correlationExpression>
这个是表示聚合条件,以头部相同的来聚合。

<completionSize>
                    <header>CamelSplitSize</header>
</completionSize>
这个是聚合完成条件。以切分的大小为完成条件。CamelSplitSize这个参数在camel的2.9以后已经加入到了camel的头部header 里面。详细请参考链接http://camel.apache.org/splitter.html

completionTimeout="3000"这个参数是超时时间,当3秒钟还没聚合完时,就算超时。
strategyRef="aggregatorStrategy" 这个是聚合的策略,要自己编写一个类继承AggregationStrategy的。

里面就写要怎样聚合,我这里是简单把2个值相加。

<to uri="bean:Aggregated"/>这个是最后聚合完成了,要跳转的bean。可以自己随便写。

OrderSplit.java

package com.TicketCenter.Application.OrderProcedure;

import java.util.List;

/**
 * 切分订单
 * @author lym
 */
public class OrderSplit {
    public List<String> splitOrders(List<String> orderStrList) {
        return orderStrList;
    }
}

StringAggregationStrategy.java

package com.TicketCenter.Application.OrderProcedure;

import org.apache.camel.Exchange;
import org.apache.camel.processor.aggregate.AggregationStrategy;

/**
 *
 * @author Administrator
 */
public class StringAggregationStrategy implements AggregationStrategy {

    @Override
    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
        if (oldExchange == null) {
            return newExchange;
        }
        oldExchange.getIn().setBody(newExchange.getIn().getBody(Order.class));
        return oldExchange;
    }
}

 

分享到:
评论

相关推荐

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

    这个"Apache Camel 开发使用指南中文版"压缩包文件很可能是为初学者和有经验的开发者准备的一份详细教程,帮助他们理解和掌握Apache Camel的核心概念和实际应用。 在学习Apache Camel时,首先要理解的是它的核心...

    camel-jdbc-aggregator-2.6.0.jar

    jar包,亲测可用

    camel-jdbc-aggregator-2.6.0-sources.jar

    jar包,亲测可用

    ApacheCamel-JDBC

    - **处理查询结果**:可以使用Camel的`aggregator`、`splitter`或其他处理器来处理查询结果集。 4. **SQL查询支持**: Camel-JDBC 支持多种类型的SQL操作,包括SELECT、INSERT、UPDATE和DELETE。同时,也可以使用...

    Camel in action(camel实战)

    - 第四章介绍了如何在 Camel 应用程序中使用 Java Beans 来处理业务逻辑。 - **错误处理** - 第五章专门讲解了 Camel 的错误处理机制,帮助开发者更好地理解如何设计健壮的应用程序。 - **测试** - 第六章...

    使用CXF和camel-cxf调用webservice

    在IT行业中,Web服务是一种广泛使用的通信方式,它允许不同系统之间通过网络交换数据和执行功能。Apache CXF和camel-cxf是两个流行的开源框架,它们可以帮助开发者轻松地创建、消费和集成Web服务。本篇文章将详细...

    Apache Camel 其他.rar

    Camel的Splitter EIP用于分解消息,而Aggregator EIP则负责聚合结果。这两个组件结合使用,可以有效地处理复杂的批量操作。 4. **错误处理和补偿**:Apache Camel 提供了丰富的错误处理策略,如重试、死信队列和红...

    [Camel实战].(Camel.in.Action).Claus.Ibsen&Jonathan;.Anstey.文字版

    - **表达式和谓词 (Expressions and predicates)**:详细讨论了如何在Camel中使用表达式和谓词。 - **生产者和消费者模板 (The producer and consumer templates)**:讲解了如何使用生产者和消费者模板来简化编程...

    Camel in action PDF和源代码

    学习Apache Camel能够提升开发者在企业级集成项目中的能力,因为Camel的设计理念是重用和组合现有技术,减少了开发新集成解决方案的复杂性。通过这本书,你可以了解到如何有效地使用Camel来连接不同的系统,创建灵活...

    Camel服务集成,服务编排操作文档

    在“Camel服务集成,服务编排操作文档”中,我们将深入探讨Camel的核心概念和实践技巧。 1. **Camel简介** Apache Camel 的设计灵感来源于Enterprise Integration Patterns (EIP),它提供了一个模型来描述如何在...

    camel文档

    - **第4章:在Camel中使用Beans** - **Java Beans集成**:说明如何将Java Beans集成到Camel中,以便更高效地处理业务逻辑。 - **自定义组件**:介绍如何创建自定义组件以扩展Camel的功能。 - **案例研究**:通过...

    CAMEL 呼叫流程和信令流程

    CAMEL主要应用于GSM网络,通过GSM网络中的智能网组件来实现对呼叫流程和信令流程的控制,以支持各种增值服务。本文将详细介绍CAMEL呼叫流程与信令流程的关键概念和技术细节。 #### 关键概念 **1. CAMEL ...

    Camel_应用开发文档.pdf

    Camel 应用开发文档是 Apache Camel 的官方文档,提供了 Camel 框架的详细介绍、使用指南和开发指南。该文档适合各种级别的开发者,从初学者到高级开发者,都可以从中获益。 3. Apache Camel 架构 Apache Camel 的...

    Camel实战中文版第四章.pdf

    《Camel实战中文版第四章》主要探讨了Apache Camel框架中如何利用现有的Java Bean进行消息处理和服务调用。这一章节对于理解和掌握Camel如何与现有Java系统集成非常重要。 #### 二、ServiceActivator企业设计模式的...

    camel in action 中文版 第一章

    " Camel In Action 中文版第一章知识点" 本章节将对 Camel 框架进行介绍, Camel 是一个开源的一体化框架,其...其他开源的项目,例如 Apache ServiceMix 和 ActiveMQ 已经使用 camel 作为企业集成的一种处理方式。

    servicemix 7安装使用及camel-cxf代理webservice

    【标题】:“servicemix 7安装使用及camel-cxf代理webservice”涉及的知识点主要涵盖Apache ServiceMix 7的安装配置、Apache Camel和Apache CXF的集成使用,以及如何利用它们来代理Web服务。 Apache ServiceMix是...

    Camel_Camel3Camel6函数_

    在MATLAB编程环境中,"Camel3Camel6函数"是指用于特定数学计算或数据分析的一系列函数。这些函数可能涉及到曲线拟合、数值优化、数据处理等应用,尤其是在处理涉及非线性问题时,比如模拟生物体的驼峰形状、物理学中...

    apache-camel-2.8.6-src.zip

    EIP是一套在企业应用集成领域广泛认可的设计模式,如Message Broker、Content-based Router、Splitter、Aggregator等。通过Camel,你可以使用Java、XML或Groovy等语言来定义这些模式,形成所谓的路由规则,即“DSL...

    camel-manual-2.10.4.pdf

    - 教程:通过一系列教程,逐步教授Camel的使用和最佳实践。 - 语言附录:介绍各种编程语言和配置文件的Camel支持情况。 - 数据格式附录:解释如何在Camel中使用不同的数据格式。 - 模式附录:深入讨论Camel实现的...

Global site tag (gtag.js) - Google Analytics