2014-05-09 43 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