2014-05-09 79 views
0

我使用camel.version:2.12.1駱駝動態端點中的每一行CSV

我有需要

  1. 解析路線的CSV文件
  2. 拆分每個行
  3. 爲每一行,我需要確定目標端點和記錄需要路由這些目的地。

直到日期,我有

org.apache.camel.model.ProcessorDefinition.recipientList().method(beanInstance, "methodName") 

路由一個傳入消息駱駝。

如何在行級實現動態路由?

在此先感謝。

+0

將行分割爲單獨的記錄(即通過標記\ n)後,識別端點的邏輯是什麼?你是說在分裂之後,記錄是否代表終點?你能提供一個輸入樣本嗎? – Narita

回答

0

使用分割樣式與自定義調度:

public class MessageRouter { 
    public String routeTo(final String row) { 
     String id; 
     if (row.contains("1")) { 
      id = "sub1"; 
     } else if (row.contains("2")) { 
      id = "sub2"; 
     } else { 
      id = "default"; 
     } 
     return "direct:" + id; 
    } 
} 

路由定義:

@Override 
public void configure() { 
    from("direct:start") 
     .split(body().tokenize("\n")) 
     .recipientList() 
     .method(MessageRouter.class); 

    from("direct:token1") 
     .log("Token1: body = ${body}"); 

    from("direct:token2") 
     .log("Token2: body = ${body}"); 

    from("direct:default") 
     .log("default: body = ${body}"); 

} 

測試用:

ProducerTemplate template = context.createProducerTemplate(); 
template.sendBody("direct:start", "token1\ntoken2\ntoken3"); 

這導致下面的輸出:

INFO sub1: body = token1 
INFO sub2: body = token2 
INFO default: body = token3