2019独角兽企业重金招聘Python工程师标准>>>

split和aggregate,看图就明白了。

下面我用一个例子来说明,非常难得,你很难在网上找到apache camel这样的例子。

1、路由

from("jms:TOOL.TTT").bean(TttBean.class, "start").split(body(List.class),new MyAggregationStrategy()).bean(TttBean.class, "processOneLi").end().split(body(List.class)).bean(TttBean.class, "processOne").bean(TttBean.class, "end");

2、测试bean

public class TttBean {public void start(Exchange exchange){List<List<Integer>> ii = new ArrayList<List<Integer>>();for(int i =0;i<2;i++){List<Integer> li = new ArrayList<Integer>();for(int j = 10;j < 15; j++){li.add(j);}ii.add(li);}exchange.getIn().setBody(ii);System.out.println("start....");}public void processOneLi(Exchange exchange){System.out.println("CamelSplitIndex:" + exchange.getProperty("CamelSplitIndex",int.class));System.out.println("CamelSplitSize:" + exchange.getProperty("CamelSplitSize",int.class));System.out.println("CamelSplitComplete:" + exchange.getProperty("CamelSplitComplete",boolean.class));List<Integer> li = exchange.getIn().getBody(List.class);System.out.println("oneLi");}public void processOne(Exchange exchange){System.out.println("CamelSplitIndex:" + exchange.getProperty("CamelSplitIndex",int.class));System.out.println("CamelSplitSize:" + exchange.getProperty("CamelSplitSize",int.class));System.out.println("CamelSplitComplete:" + exchange.getProperty("CamelSplitComplete",boolean.class));int i = exchange.getIn().getBody(int.class);System.out.println(i);}public void end(Exchange exchange){System.out.println("ending....");}
}

3、聚合类

public class MyAggregationStrategy implements AggregationStrategy{@Overridepublic Exchange aggregate(Exchange oldExchange, Exchange newExchange) {if (oldExchange == null) {// the first time we aggregate we only have the new exchange,// so we just return itreturn newExchange;}List<Integer> lio = oldExchange.getIn().getBody(List.class);List<Integer> lin = newExchange.getIn().getBody(List.class);for(Integer i : lin){lio.add(i);}oldExchange.getIn().setBody(lio);return oldExchange;}}

4、输出:

start....

CamelSplitIndex:0

CamelSplitSize:2

CamelSplitComplete:false

oneLi

CamelSplitIndex:1

CamelSplitSize:2

CamelSplitComplete:true

oneLi

CamelSplitIndex:0

CamelSplitSize:10

CamelSplitComplete:false

10

ending....

CamelSplitIndex:1

CamelSplitSize:10

CamelSplitComplete:false

11

ending....

CamelSplitIndex:2

CamelSplitSize:10

CamelSplitComplete:false

12

ending....

CamelSplitIndex:3

CamelSplitSize:10

CamelSplitComplete:false

13

ending....

CamelSplitIndex:4

CamelSplitSize:10

CamelSplitComplete:false

14

ending....

CamelSplitIndex:5

CamelSplitSize:10

CamelSplitComplete:false

10

ending....

CamelSplitIndex:6

CamelSplitSize:10

CamelSplitComplete:false

11

ending....

CamelSplitIndex:7

CamelSplitSize:10

CamelSplitComplete:false

12

ending....

CamelSplitIndex:8

CamelSplitSize:10

CamelSplitComplete:false

13

ending....

CamelSplitIndex:9

CamelSplitSize:10

CamelSplitComplete:true

14

ending....

我的例子里面从一个jms消息开始,然后经历一系列的路由处理,最终将任务完成。问题是,我们希望在任务结束的时候,再发一个jms来通知任务发起者,“我已经完成啦。”,但上面的输出显然有问题,因为有好多个end....。当然,根据我提供的代码,你肯定发现多种方法来判断任务的结束。你可以试试看。

转载于:https://my.oschina.net/jianglibo/blog/17627

apache camel 的 split 和 aggregate相关推荐

  1. apache camel_学习Apache Camel –实时索引推文

    apache camel 在大多数软件开发项目中,有一点需要使应用程序开始与其他应用程序或第三方组件通信. 无论是发送电子邮件通知,调用外部api,写入文件还是将数据从一个地方迁移到另一个地方,您都可 ...

  2. apache camel_发掘Apache Camel的力量

    apache camel 最近几年,ESB软件越来越受欢迎. 如果大多数人通常知道什么是ESB,那么他们很少会清楚地了解这种体系结构的不同组件的确切作用. 例如,Apache ServiceMix由三 ...

  3. 学习Apache Camel –实时索引推文

    在大多数软件开发项目中,有一点需要使应用程序开始与其他应用程序或第三方组件通信. 无论是发送电子邮件通知,调用外部api,写入文件还是将数据从一个地方迁移到另一个地方,您都可以推出自己的解决方案或利用 ...

  4. 发掘Apache Camel的力量

    最近几年,ESB软件越来越受欢迎. 如果大多数人通常知道什么是ESB,那么他们很少会清楚地了解这种体系结构的不同组件的确切作用. 例如,Apache ServiceMix由三个主要组件组成:Apach ...

  5. springboot 整合 apache camel实现企业级数据集成和处理

    Apache Camel是一个集成框架,它具有用于集成各种应用程序的编程模型. 对于需要在不同的微服务和其他上下游系统(如数据库和消息传递系统)之间进行通信的微服务体系结构,它非常适合. 在本文中,我 ...

  6. 简化软件集成:一个Apache Camel教程

    本文来自于阮一峰,文章主要讲解了构建的流程,每个步骤介绍的较为详细,希望对大家有帮助. 软件很少(如果有的话)存在于信息真空中.至少,这是我们软件工程师可以为我们开发的大多数应用程序做出的假设. 在任 ...

  7. apache camel_探索Apache Camel Core –文件组件

    apache camel 文件轮询器是解决常见IT问题的非常有用的机制. Camel的内置file组件非常灵活,并且有许多选项可用于配置. 让我们在这里介绍一些常用用法. 轮询目录以输入文件 这是一条 ...

  8. apache camel_轻量级的开源集成:Apache Camel还是Spring集成?

    apache camel 首先,为全面披露信息,在过去的1.5年中, 我一直担任 FuseSource(现为Red Hat) 的顾问,为零售,运输,银行/金融等不同行业的大型和小型公司提供SOA和集成 ...

  9. Apache Camel –从头开始开发应用程序(第1部分/第2部分)

    开始之前 前一段时间,我写了一篇关于Spring Integration的教程,以演示如何在受现实发票处理系统启发的示例应用程序中使用Spring Integration. 我对此非常满意,因此我决定 ...

最新文章

  1. android button背景随心搭配
  2. 深入理解javascript原型和闭包(2)——函数和对象的关系
  3. leetcode455. 分发饼干
  4. android 在什么情况下会主动gc_Python 什么情况下会生成 pyc 文件?
  5. 华为p50预装鸿蒙系统,华为P50系列将至,内部测试预装鸿蒙系统,还有4款重磅新品将发布...
  6. 这才是真正适合小白的教程:Python有什么用?数据化运营怎么做?
  7. 为 IDES471 激活中文
  8. 实用UI设计需要学什么软件?
  9. 计算机网络学习笔记(30. DNS记录和消息)
  10. 5-7Linux 起源,与Unix的联系,与Windows的不同
  11. XP桌面背景文件路径
  12. 360网站域名拦截检测 非法网址检测系统原理
  13. 在Azure的云服务器上搭建个人网站
  14. [读书笔记]高效15法则 谷歌、苹果都在用的深度工作法
  15. 痛失移动支付的翼支付,未来仍存四大机会?
  16. VM虚拟机Ubuntu配置静态ip,亲测有效
  17. 高等代数 线性映射(第9章)1 概念,运算,核与象
  18. Access-Control-Allow-Origin 解决方法
  19. 怎么找回xmind意外关机的文件_如何在意外关机后恢复文件
  20. Android 读取、接收、发送 手机短信

热门文章

  1. 关于网页制作的规划与流程图的使用
  2. NetBeans优化技巧 提升启动速度
  3. C++ 设计员工类(Employee)
  4. Node.js 将Json文件数据转为SQL可执行的insert语句
  5. php+icu+库是什么意思,如何从PHP Intl(ICU库)中的货币代码获取货币符号
  6. memcache redis
  7. 关于mysql启动问题---mysqld_safe mysqld from pid file * ended
  8. 软件工程实践2017第二次作业
  9. 【译文】MySQL InnoDB 事物模型
  10. ubuntu apache2 的负载均衡和反向代理