如何更快地制作Apache Camel Routes?

时间:2014-01-29 00:45:34

标签: java performance routing apache-camel asynchronous

我想要做的是提高路线的速度,这意味着我希望每秒执行更多的路线。

我可以在不同的线程上同时运行我正在运行的100条路线吗?如果是这样,我该怎么做?

我正在运行这样的普通路线并收集主循环的开始和结束时间:

import java.util.Calendar;

import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.builder.AdviceWithRouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;

public class TestAdviceRoute extends AdviceWithRouteBuilder {


    @Override
    public void configure() throws Exception {
        from("direct:start")
        .routeId("Doug")
        .process(new PrintProcessor())
        .end()
        ;
        }
    }

    @SuppressWarnings("deprecation")
    public static void main(String[] args) throws Exception{
        CamelContext context = new DefaultCamelContext();
        System.out.println("Start Time:" + Calendar.getInstance().getTime());
        for (int i = 0; i < 100; i++) {
            context.addRoutes(new TestAdviceRoute());
            context.getRouteDefinition("Doug").adviceWith(context, new WrapRoute());

            context.createProducerTemplate().sendBody("direct:start", "Doug");
            context.stop();
        }
        System.out.println("End Time:" + Calendar.getInstance().getTime());
    }

}

注意:我已经检查了Apache Camel - AsyncProcessing,但我没有发现这对提高单一路线的速度非常有帮助。但是,当试图同时运行两条不同的路线时,它确实缩短了时间。

1 个答案:

答案 0 :(得分:4)

你肯定做了一件坏事和奇怪的事情。

一些指针

  1. 你应该只停止一次驼峰上下文,而不是每个循环。
  2. 创建一次生产者模板并重复使用
  3. 你为什么要推荐路线?这样做会导致路由重新启动。不确定你的意思。
  4. 直接组件用于同步直接方法调用。
  5. 如果您希望更多线程处理来自单个路由的消息,则可以将seda与并发使用者一起使用。