阿帕奇骆驼备忘单



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

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/369950.shtml

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

相关文章

js中双感叹号_JavaScript中双叹号(!!)作用

经常看到这样的例子&#xff1a;vara&#xff1b;var b!!a;a默认是undefined。!a是true&#xff0c;!!a则是false&#xff0c;所以b的值是false&#xff0c;而不再是undefined&#xff0c;也非其它值&#xff0c;主要是为后续判断提供便利。!!一般用来将后面的表达式强制转换为…

大头贴计算机教程,推荐!自家电脑也能拍大头贴的秘密

您可能感兴趣的话题&#xff1a;美图拍拍核心提示&#xff1a;一直都超爱拍大头贴&#xff0c;喜欢每张都能换不同的框框&#xff1b;喜欢可以直接看到效果&#xff0c;做出满意的动作&#xff1b;喜欢将大头贴和朋友们分享……不过夏日炎炎的&#xff0c;出门太麻烦&#xff0…

用CSS伪类制作一个不断旋转的八卦图?

前言 介绍一下如何制作一个不断旋转的八卦图。快速预览代码及效果&#xff0c;点击&#xff1a;八卦图 代码如下&#xff1a; HTML部分 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>JS Bin</title> </head&…

js根据ip自动获取地址(省市区)

HTML&#xff1a; <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0"><title>标题</title>&l…

流利的对象创建

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

计算机等级考试试题4,计算机等级考试二级模拟试题4

计算机等级考试二级模拟试题计算机等级考试二级模拟试题4基础知识与FOXBASE程序设计(考试时间120分钟&#xff0c;满分100分)一、选择题((1)-(40)每个选项1分,(41)-(50)每个选项2分,共60分)下列各题A)、B)、C)、D)、四个有选项中,只有一个选项是正确的(1)通常所说的主机主要包括…

springboot怎么替代jsp_如何在SpringBoot中使用JSP ?

1. 在pom.xm中加入支持JSP的依赖org.apache.tomcat.embedtomcat-embed-jasperprovidedjavax.servlet.jsp.jstljstl-api1.22. 在src/main/resources/application.properties文件中配置JSP和传统Spring MVC中和view的关联# MVCspring.view.prefix/WEB-INF/views/spring.view.suff…

css选择器的综合使用

代码实现&#xff1a; 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"utf-8">5 <title>css的综合使用</title>6 <style>7 div {8 colo…

启动tomcat时 一闪而过解决方法

【前文】 在实际开发中一般都是eclipsetomcat(也许还会用到tomcat的插件)&#xff0c;我们只需要在eclipse中单击servers上的按钮就可以成功启动tomcat了&#xff0c; 但是如果想在tomcat的安装目录下 双击startup.bat启动时却一闪而过了。这是为什么呢&#xff08;tomcat启动失…

Google Guava多集

继续这次番石榴之旅&#xff0c;我们到达了Multiset 。 我可能不像Multimaps或Bimaps那样使用它&#xff0c;但是它确实有它的用途。 那么什么是多重集&#xff1f; 也许您可以猜到它是一个可以容纳同一对象的多个实例的集合。 这不仅仅是列表吗&#xff1f; 在Java中&#x…

用javascript实现简单的用户登录验证

用javascript实现简单的用户登录验证 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body><script type"text/javascript">function c…

怎么把计算机改程序,怎样修改程序软件

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。修改程序软件的方法是&#xff1a;这个必须要会编程才行&#xff1b;不会编程的话那是不可能的&#xff1b;对它进行反编译&#xff1b;脱壳&#xff1b;反编译好再把它重新加壳。程…

HTML的display属性将行内元素、块状元素、行内块状元素互相转换以及三者的区别

1.行内元素 查看演示 (1)设置宽高无效 (2)对margin仅设置左右方向有效&#xff0c;上下无效&#xff1b;padding设置上下左右都有效&#xff0c;即会撑大空间 (3)不会自动进行换行 <html> <head> <meta charset"utf-8" /> <title>行内元…

linux里面三剑客的重要作用

在服务器日志fresh.log中&#xff0c;找到所有报错的日期 $ sed -n /Error/p | awk {print $1} fresh.log grep:查找sed:行编辑器awk:文本处理工具 正则表达式的应用场景查找所有包含xxx的行取出以abc开头的所有单词匹配两位数、密码、QQ号、身份证号等 查找、取出、匹配符合条…

i2c通信 msp430g2553_关于msp430G2553的I2C串行通信

这是msp430g2xx3_uscib0_i2c_09例程&#xff0c;i2c从机接收数据的程序&#xff0c;请高手指点一下&#xff0c;为什么读取UCB0RXBUF是在发送中断中&#xff1f;接收机是在什么时候进入发送中断的&#xff1f;#include unsigned char *PRxData; // Pointer to RX dataunsigned …

Google Guava BiMaps

接下来的番石榴之旅&#xff0c;是另一种有用的收藏类型BiMap 。 实际上&#xff0c;这非常简单&#xff0c;BiMap只是双向地图。 反转地图 普通的Java映射是一组键和值&#xff0c;您可以按键查找值&#xff0c;这非常有用&#xff0c;例如&#xff0c;说我想创建一个&#x…

老大写得一个非常高大上的Makefile,包括非常多语法:

一个非常高大上的Makefile&#xff0c;包括非常多语法&#xff1a; TARGET api-login INSTALL_PATH /huishoubao/cgiinclude ../../implements/log/Makefile.log include ../../implements/tools/Makefile.tools include ../../implements/db/Makefile.db include ../../impl…

计算机等级考试模拟题卷子,二级VB模拟试卷 1

一、选择题&#xff1a;35题&#xff0c;2分/题&#xff0c;共70分下列各题A)、B)、C)、D)四个选项中&#xff0c;只有一个选项是正确的&#xff0c;请将正确选项涂写在答题卡相应位置上&#xff0c;答在试卷上不得分。1.假定窗体有一个标签&#xff0c;名为Label1,为了使该标签…

bugly怎么读_腾讯Bugly巨坑:使用不当造成UI界面卡死

本文由CocoaChina网友gagaga投稿前言Bugly和dispatch_once使用不当&#xff0c;会造成UI界面卡死。笔者在前段时间碰见了这样的一个卡死的情况&#xff0c;特意记录下来。iOS开发者或多或少都听过或用过Bugly。它是腾讯开发的一个SDK&#xff0c;用来捕捉App中的crash。对于dis…

复习HTML CSS(5)

n <meta>标记 <meta>的主要作用&#xff0c;是提供网页的源信息。比如&#xff1a;指定网页的搜索关键字 <meta>标记有两个属性&#xff1a;http-equiv和name。 1、 http-equiv属性 功能&#xff1a;模拟http协议文件头信息&#xff0c;当信息从服务器端传…