阿帕奇跨域_阿帕奇骆驼备忘单
阿帕奇跨域
輪詢一個空目錄(并發送一個空消息,正文為空):
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 :上面是一個聚合器的示例,該聚合器將列表中所有消息的內容分組:
手動觸發聚合的完成(無論它是什么):
發送帶有標題Exchange.AGGREGATION_COMPLETE_ALL_GROUPS = true的消息
可以執行from('bean:...') ,因為知道該bean將被永久輪詢(如使用'file'),并且每次都被實例化。 使用以下命令修改路線上的郵件正文 :
與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)
與:
線程管理的一般概念:
- 一個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的方法:
- 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()將為每個元素創建一條新消息(最好避免,請參見上方)
- 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
阿帕奇跨域
總結
以上是生活随笔為你收集整理的阿帕奇跨域_阿帕奇骆驼备忘单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果电脑如何连接网线苹果笔记本电脑如何连
- 下一篇: 7.0上的新KIE持久性API