日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阿帕奇跨域_阿帕奇骆驼备忘单 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

阿帕奇跨域



輪詢一個空目錄(并發送一個空消息,正文為空):

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的方法:

  • 方法的返回始終會影響到消息的正文。 例如 :
    • 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

    阿帕奇跨域

    總結

    以上是生活随笔為你收集整理的阿帕奇跨域_阿帕奇骆驼备忘单的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。