阿帕奇跨域_阿帕奇骆驼备忘单

阿帕奇跨域



轮询一个空目录(并发送一个空消息,正文为空):

from('file://temp?sendEmptyMessageWhenIdle=true')

停止路线:

.process(new Processor() {public void process(Exchange exchange) throws Exception {getContext().stopRoute('ROUTE_ID');}
})

访问主体中对象的属性:

承认对象有一个名为'getMydata()'的方法:

new ValueBuilder(simple('${body.mydata}')).isEqualTo(...)

定义一个聚合器:

.aggregate(simple('${header.id}.substring(0,15)'), genericAggregationStrategy)
.completionPredicate(header(Exchange.BATCH_COMPLETE).isEqualTo(Boolean.TRUE))
  • '${header.id}.substring(0,15)' :标记以区分消息(此处,返回的字符串是所有消息所共有的,我们将它们汇总在一起)
  • Exchange.BATCH_COMPLETE :谓词表示轮询结束(例如,解析的所有文件)
  • genericAggregationStrategy :上面是一个聚合器的示例,该聚合器将列表中所有消息的内容分组:
public class GenericAggregationStrategy implements AggregationStrategy {@SuppressWarnings('unchecked')public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {if (oldExchange == null) {ArrayList<Object> list = new ArrayList<Object>();list.add(newExchange.getIn().getBody());newExchange.getIn().setBody(list);return newExchange;} else {Object oldIn = oldExchange.getIn().getBody();ArrayList<Object> list = null;if(oldIn instanceof ArrayList) {list = (ArrayList<Object>) oldIn;} else {list = new ArrayList<Object>();list.add(oldIn);}list.add(newExchange.getIn().getBody());newExchange.getIn().setBody(list);return newExchange;}}
}

手动触发聚合的完成(无论它是什么):

发送带有标题Exchange.AGGREGATION_COMPLETE_ALL_GROUPS = true的消息
可以执行from('bean:...') ,因为知道该bean将被永久轮询(如使用'file'),并且每次都被实例化。 使用以下命令修改路线上的邮件正文

.transform(myExpression)

myExpression

public class MyExpression implements Expression {public <T> T evaluate(Exchange exchange, Class<T> type) {MyBean newData = ...;return exchange.getContext().getTypeConverter().convertTo(type, newData);}
}

使用JaxB:

  • 在路线上:
    .[un]marshal().jaxb('my.business_classes.package')
  • 具有可配置的DataFormat:
    .[un]marshal(jaxbDataFormat)

    与:

// indicate to Jaxb to not write XML prolog :
JaxbDataFormat jaxbDataFormat = new JaxbDataFormat('my.business_classes.package');
jaxb.setFragment(true);

线程管理的一般概念:

  • 一个from(...) =一个线程
  • 除了from('direct:...') wich会创建一个具有唯一标识符的“命名路由”,该标识符只能由另一个路由(在与调用方相同的线程中)调用。
  • 组件.resequence().batch()创建一个新线程以重新抛出消息。

定义关闭策略:

getContext().setShutdownStrategy(new MyShutdownStrategy(getContext()));

与:

public class MyShutdownStrategy extends DefaultShutdownStrategy {protected CamelContext camelContext;private long timeout = 1;private TimeUnit timeUnit = TimeUnit.SECONDS;public SpiralShutdownStrategy(CamelContext camelContext) {this.camelContext = camelContext;}@Overridepublic long getTimeout() {return this.timeout;}@Overridepublic TimeUnit getTimeUnit() {return this.timeUnit;}@Overridepublic CamelContext getCamelContext() {return this.camelContext;}/*** To ensure shutdown**/@Overridepublic void suspend(CamelContext context, List<RouteStartupOrder> routes) throws Exception {doShutdown(context, routes, getTimeout(), getTimeUnit(), false, false, false);}/*** To ensure shutdown**/@Overridepublic void shutdown(CamelContext context, List<RouteStartupOrder> routes, long timeout, TimeUnit timeUnit) throws Exception {doShutdown(context, routes, this.timeout, this.timeUnit, false, false, false);}/*** To ensure shutdown**/@Overridepublic boolean shutdown(CamelContext context, RouteStartupOrder route, long timeout, TimeUnit timeUnit, boolean abortAfterTimeout)throws Exception {super.shutdown(context, route, this.timeout, this.timeUnit, false);return true;}
}

停止批处理:

.process(new Processor() {public void process(Exchange exchange) throws Exception {context.stop();}
});

从路由调用bean的方法:

  1. 方法的返回始终会影响到消息的正文。 例如 :
    • public void myMethod(Exchange e)
      不会修饰身体
    • public boolean myMethod(Exchange e)
      布尔值(或任何原始类型)将在主体中设置
    • public Object myMethod(Exchange e)
      该对象将被放置在主体中(即使为null)
    • public Message myMethod(Exchange e)
      邮件将被放置在正文中(最好避免这种情况)
    • public List<Object> myMethod(Exchange e)
      该列表将在正文中设置:与.split()一起使用时很有用,每个对象将以新消息发送
    • public List<Message> myMethod(Exchange e)
      该列表将在正文中设置: .split()将为每个元素创建一条新消息(最好避免,请参见上方)
  2. 可配置方法的参数:
    • public void myMethod(Exchange e)
      完整的交换将通过
    • public void myMethod(Object o)
      骆驼将尝试在所需参数的类中转换主体
    • public void myMethod(@Body File o, @Header('myHeader') String myParamHeader)
      骆驼将按规定注入每个参数

路线上的例外管理:

  • 以全局方式(在所有路径之前声明):
    onException(MyException.class, RuntimeCamelException.class).to(...)...
  • 真正处理异常而不在路径(和日志)中冒泡:
    onException(...).handled(true).to(...)...
  • 在Exception之后继续在路由中进行处理:
    onException(...).continued(true).to(...)...
  • 例外是“已处理”或“继续”
  • 本地方式(沿路线):
    from(...)
    .onException(...).to('manage_error').log('FAIL !!').end()
    .to('continue_route')...

要写入文件,只需要标题Exchange.FILE_NAME

使用

  • 使用表达式从唯一的可比较“键”(数字,字符串或自定义比较器)计算消息的新顺序
  • 两种方式:
    • .batch():批处理模式。

用标记分裂身体:

.split(body().tokenize('TOKEN'))

知道令牌将从内容中删除。 例如,如果收到包含以下内容的消息:“ data1TOKENdata2TOKENdata3”,则创建的消息将为:“ data1”,“ data2”,“ data3”。 因此,在处理XML数据时应避免这种情况,建议使用“ tokenizeXML()”。

动态访问人体数据:

  • 轻量级“脚本”语言: 简单表达语言
  • 读取文件数据: 文件表达语言

发送邮件:

from('direct:mail').setHeader('To', constant(mailTo)).setHeader('From', constant(mailFrom)) .setHeader('Subject', constant(mailSubject)) .to('smtp://${user}@${server}:${port}?password=${password}');

带有附件:

.beanRef(MAIL_ATTACHER, 'attachLog');
//with
public class MailAttacher {public void attachLog(Exchange exc) throws Exception {File toAttach = ...;   exc.getIn().addAttachment(toAttach.getName(), new DataHandler(new FileDataSource(toAttach)));// if neededexc.setProperty(Exchange.CHARSET_NAME, 'UTF-8');}
}

有用的Exchange属性:

  • Exchange.AGGREGATED_ *:聚合管理
  • Exchange.BATCH_ *:已处理的邮件管理
  • Exchange.FILE_ *:文件消息管理
  • Exchange.HTTP_ *:Web请求管理
  • Exchange.LOOP_ *:循环管理
  • Exchange.REDELIVERY_ *:异常管理
  • Exchange.SPLIT_ *:内容分割管理

循环路线:

from('direct:...')
.loop(countExpression)
.to('direct:insideLoop')
.end()

其中“ countExpression”是用于动态计算循环计数(评估进入循环)的表达式。 如果过程很复杂,最好将循环的代码移动到新的路径中。

标头管理:

消息的标题是在创建消息时定义的。 当使用'.split()'时,所有后续消息都将具有与原始消息相同的头(因此,在管理文件时要小心)。 在聚合中,必须手动管理自定义标头,以保留在其余路由中。

截取消息

并执行路由并行化(在路由之前声明):

interceptSendToEndpoint('ENDPOINT_TO_INTERSEPT').to(...)...

参考: Developpef博客上来自我们JCG合作伙伴 Paul-Emmanuel的Apache Camel Cheatsheet 。

翻译自: https://www.javacodegeeks.com/2013/01/apache-camel-cheatsheet.html

阿帕奇跨域

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

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

相关文章

天空之城 matlab,[转载]matlab演奏《天空之城》代码

%matlab演奏《天空之城》代码l_dao262; %将“l_dao”宏定义为低音“1”的频率262Hzl_re286; %将“l_re”宏定义为低音“2”的频率286Hzl_mi311; %将“l_mi”宏定义为低音“3”的频率311Hzl_fa349; %将“l_fa”宏定义为低音“4”的频率349Hzl_sao392; %将“l_sao”宏定义为低音“…

7.0上的新KIE持久性API

这篇文章介绍了即将到来的Drools和jBPM持久性api。 创建持久性api&#xff08;不绑定到JPA&#xff09;的动机是因为Drools和jBPM中的持久性直到7.0.0发行版才允许将替代性持久性机制与JPA完全集成。 尽管JPA是一个出色的api&#xff0c;但它与传统RDBMS模型紧密地结合在一起&a…

从客户的角度看网站涉及的第一要素

最近给某企业做了一个内部网站&#xff0c;界面风格、内容都是按照客户的要求进行了开发&#xff0c;测试阶段客户比较满意。投入试运行后&#xff0c;客户的领导级人物看了一眼首页中图片的大小&#xff08;600K&#xff09;&#xff0c;马上对我们的软件开发水平进行贬低。因…

linux ssl PHP,Linux环境安装Apache与PHP,支持SSL

1、Apache在如下页面下载apache的for Linux 的源码包http://www.apache.org/dist/httpd/;存至/home/xx目录&#xff0c;xx是自建文件夹&#xff0c;我建了一个wj的文件夹。命令列表&#xff1a;cd /home/wjtar -zxvf httpd-2.0.54.tar.gzmv httpd-2.0.54 apachecd apache./conf…

JBUILDER 2006怎么配置 STRUTS?[

建web工程时引入struts框架&#xff0c;选版本就可以了。jbuilder2006中有一个struts的可视化操作界面天极网有详细的图文资料,搜以下就可以找到关注首先新建项目然后选择Web选项,双击Web Module(WAR)创建一个Module&#xff0c;我感觉这个Web Module就相当于虚拟目录。然后可以…

dos命令查看oracle_home,Oracle - OraDb10g_home1配置方法+DOS命令

实验一(时间&#xff1a;2012.3.6)1实验项目名称&#xff1a;ORACLE 10G的安装、运行与配置2实验内容&#xff1a;a.检查ORACLE 10G安装的软硬件环境&#xff0c;安装服务器端软件和客户端软件&#xff1b;b.查看安装后的结果&#xff1b;c.启动与关闭监听服务、实例服务等&…

jhsdb:JDK 9的新工具

我喜欢在分析性能和其他基于Java的应用程序的其他问题的早期步骤中使用JDK随附的命令行工具&#xff0c;并在诸如jcmd &#xff0c; jps &#xff0c; jstat &#xff0c; jinfo &#xff0c; jhat和jmap &#xff0c; jrunscript &#xff0c; jstack之类的 工具上进行 博客撰…

purfer序列

prufer序列求法 对于一个无根无向图我们可以应用prufer序列操作使它缩成一个序列。 具体操作 一&#xff0c;每次选出来树中编号最小的点且度数为一&#xff08;即叶子节点&#xff09; 二&#xff0c;将与被删去的点相连的节点加入prufer序列中 重复一&#xff0c;二&#xff…

oracle11g高可用,oracle11g 搭建DG环境总结

本帖最后由 zhofly 于 2016-6-24 23:19 编辑测试环境为&#xff1a;两台服务器配置一样&#xff1a;Oracle Linux Server release 6.5 X86_64, DB 11.2.0.4.0前提环境&#xff1a;一台已经安装好数据库软件并创建数据库实例的服务器另一台也就是备库&#xff0c;只安装了数据…

树的计数(prufer序列 或 purfer序列)

题解 首先我们要知道一条性质&#xff0c;prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下&#xff0c;其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按照排列组合得出来 这是多重集排列数 首先从n-2中选择d[1]个数是$C_{…

PHP 织梦 帝国那个好,帝国、PHPCMS及织梦对比(十):推荐位功能

网站中发布的文章除了需要按时间、栏目分类、类别调用外&#xff0c;往往需要根据编辑的推荐进行不同的调用&#xff0c;那么CMS自然少不了推荐位功能。一般推荐位的设计都有首页头条、首页幻灯焦点、首页推荐、栏目页推荐、列表页推荐、内容页推荐等&#xff0c;基本可以满足站…

声明对象 创建对象_流利的对象创建

声明对象 创建对象关于此主题的文章很多&#xff08;绝大多数&#xff09;&#xff0c;但我只是想贡献我的两分钱&#xff0c;并写一篇简短的文章&#xff0c;介绍如何使用Java中的Fluent Object Creation模式或对象构建器实例化Value Objects。 值对象是由其状态&#xff08;…

shell脚本之shellcode自动提取工具

最近一直在忙着写论文。突然领导又分配任务&#xff0c;帮写个自动提取shellcode的脚本工具。因为之前&#xff0c;我们都是用objdump查看后&#xff0c;把shellcode一个个添加进去&#xff0c;很麻烦&#xff0c;害怕写错。所以说我们写这个工具还是挺有必要的。首先我们要先了…

Apache Kafka流+机器学习(Spark,TensorFlow,H2O.ai)

我于2017年5月开始在Confluent工作&#xff0c;担任技术传播者&#xff0c;专注于围绕开源框架Apache Kafka的主题。 我认为机器学习是当今最热门的流行语之一&#xff0c;因为它可以在任何行业中增加巨大的商业价值。 因此&#xff0c;您还会从我这里收到有关Apache Kafka&…

dmp文件导入11oracle数据库,如何将dmp文件导入到自己的oracle数据库中

1、首先&#xff0c;我们可以先建立自己的一个用户表空间&#xff0c;创建表空间的格式如下&#xff1a;create tablespace test(表空间的名字)datafile D:\oracle\product\10.2.0\userdata\test.dbf (这边可以写成oracle的某个路径下)size 50m (初始大小)autoextend on;(自动…

NOIP模拟测试7「方程的解·visit」

visit 由于一些不可预知的错误导致我一直WA 错误最后说 思路 方案一 假设终点在出发点右上方&#xff08;这样假设只是为了方便&#xff09; 假设向左走了a步&#xff0c;向右下了b布&#xff0c;那么相应的我们要向右走ma&#xff0c;向上nb步 总步数t 所以由多重集方案数可得…

jsf绑定bean_JSF –渴望的CDI bean

jsf绑定bean每个人都知道JSF 2中热切的托管bean。 ManagedBean具有eager属性。 如果eager true并且范围是application&#xff0c;那么必须在应用程序启动时而不是在第一次引用该bean时创建此bean。 当您想在应用程序启动期间加载应用程序范围的数据&#xff08;例如&#xff0…

红旗系统linux忘了开机密码,红旗Linux6.0中忘记了root密码

很久很久以前&#xff0c;用虚拟机安装了red flag6.0windows xp 的双系统&#xff0c;很久很久以后&#xff0c;打开虚拟机red flag系统忘记了密码&#xff1a;在网上搜了下解决办法&#xff0c;转了先&#xff0c;不知管不管用&#xff01;

在网页中的flash游戏,按方向键浏览器的滚动条会跟着滚动

今天总算把这个困扰我N久的问题给解决了&#xff0c;在我的flash游戏《牧场物语》中有方向键操作&#xff0c;但是在按上下方向键的时候浏览器右边的滚动条跟着滚动&#xff0c;也一上一下的&#xff0c;弄的我头晕&#xff0c;还让不让人活啊&#xff0c;今天终于得到答案了。…

谁最终需要Java模块?

拼图问题为1000。我作为X想要JPMS模块。 如果不是平台开发人员&#xff0c;X是什么&#xff1f; 我的回答是X是人&#xff08;减去平台开发人员&#xff0c;因为那是一个条件&#xff09; 。 我们都需要模块系统具有更安全的代码&#xff0c;从而产生更可靠的系统&#xff0c;…