如何使用骆驼路由数据?

时间:2019-12-03 18:54:26

标签: java spring-boot apache-camel

我是骆驼的新手。

当我收到对端点的请求时,应开始骆驼流。 RequestBody是流(InputA)的输入。

请让我知道如何开始:

InputA -> ProcessA -> OutputA

OutputA -> ProcessB -> OutputB

OutputB -> ProcessC -> OutputC

仅作为示例:

public class ProcessA{
    public String methodA(String arg){
        return arg;
    }
}

public class ProcessB{
    public String methodB(String arg){
        return arg;
    }
}

public class ProcessC{
    public String methodC(String arg){
        return arg;
    }
}

如何使用Camel数据流传递输入和输出。

任何帮助或链接将不胜感激。

3 个答案:

答案 0 :(得分:1)

我建议您阅读Camel in action这本书。例子很多,源代码也是可以唤醒的。当我开始学习骆驼时,我发现这本书非常有用。

除了Cluas回答外,我还可以添加一个示例:

public class Example
{

public static void main(String[] args) throws Exception
{

    CamelContext context = new DefaultCamelContext();

    context.addRoutes(new RouteBuilder()
    {

        @Override
        public void configure() throws Exception
        {
            from("InputA").process(exchange -> {
                //This is process A.
            }).to("OutputA");

            from("OutputA").process(exchange -> {
                //This is process B.
            }).to("OutputB");

            from("OutputB").process(exchange -> {
                //This is process C.
            }).to("OutputC");
        }
    });

    context.start();

    //let camel complite his job
    Thread.sleep(2000);

    context.stop();

}

}

答案 1 :(得分:0)

您可以构建3条骆驼路线,然后使用一些队列组件将它们分开,例如内部直接(通过直接方法调用而没有队列)或色达队列。

伪路由类似于:

from("someInput").process(...).to("seda:a")

from("seda:a").process(...).to("seda:b");

from("seda:b").process(...).to("seda:c");

答案 2 :(得分:0)

比方说,您从文件中读取了Json,并且想要在处理器中对其进行处理。像这样:

from("file:/C:/TEST/")
.process(new MyProcessor())
.to("direct:anotherRouter");

MyProcessor 类是实现Processor的一种特殊类型。您需要覆盖 process 方法。

public class MyProcessor implements Processor{

@Override
public void process(Exchange exchange) throws Exception {
}
}

在骆驼路线中,数据在体内。要在处理器中获取数据,您应该从主体获取数据。在示例中,是这样的

public class MyProcessor implements Processor{

@Override
public void process(Exchange exchange) throws Exception {

    String data = exchange.getIn().getBody(String.class);    
    ObjectMapper mapper = new ObjectMapper();
    JsonNode rootNode = mapper.readTree(data);
    //TODO: All the stuff you want to do with the data.
}

}