Java 驼峰路由执行优先级

Java 驼峰路由执行优先级,java,multithreading,apache-camel,Java,Multithreading,Apache Camel,我试图了解Camel是否能够在同一流程中优先于另一个路由执行 例如,我们有: from("cxfrs://restendpoint").routeId("HIGH").log("high priority"); 及 我希望高速路不要被低速路慢下来。所以,当一个巨大的文件被低端路由处理,而rest调用到达高端路由时,我希望CPU给高端路由更多的时间 我正在考虑将路由分为两个应用程序,并使用Linux进程优先级为高路由分配更多时间 有没有办法用骆驼来做到这一点?例如,可以使用线程优先级吗 感谢您的

我试图了解Camel是否能够在同一流程中优先于另一个路由执行

例如,我们有:

from("cxfrs://restendpoint").routeId("HIGH").log("high priority");

我希望高速路不要被低速路慢下来。所以,当一个巨大的文件被低端路由处理,而rest调用到达高端路由时,我希望CPU给高端路由更多的时间

我正在考虑将路由分为两个应用程序,并使用Linux进程优先级为高路由分配更多时间

有没有办法用骆驼来做到这一点?例如,可以使用线程优先级吗

感谢您的帮助

看看(最初的情况不同,但解决方案也适用于您的用例):

  • 使用JMS并优先处理队列
  • 如前所述,使用SEDA阻塞队列
  • 使用重排序器
编辑:

作为附加选项,使用带有自定义
线程工厂的
ExecutorService
,并设置线程优先级,例如:

ThreadFactory threadFactory = new ThreadFactory() {
    @Override
    public Thread newThread(final Runnable r) {
        Thread thread = new Thread(r);
        thread.setPriority(Thread.MIN_PRIORITY);
        return thread;
    }
};

ExecutorService exe = Executors.newFixedThreadPool(3, threadFactory);

from("direct:slow")
    .threads()
    .executorService(exe)
    ...

您可以找到一篇关于Java线程优先级的文章。

谢谢您的回复。您描述的解决方案允许优先考虑一条路线,而不是另一条路线。但问题是:如果长时间的处理(比如解析一个非常大的文件)需要5分钟以上,并且在解析开始后优先级调用到达,那么这种解决方案如何帮助为优先级调用提供更多资源?据我所知,这些解决方案允许按优先级排序,但不允许为一条路由分配更多的资源。@Thomas我添加了一个
ExecutorService
选项,看起来很棒!谢谢你的帮助
ThreadFactory threadFactory = new ThreadFactory() {
    @Override
    public Thread newThread(final Runnable r) {
        Thread thread = new Thread(r);
        thread.setPriority(Thread.MIN_PRIORITY);
        return thread;
    }
};

ExecutorService exe = Executors.newFixedThreadPool(3, threadFactory);

from("direct:slow")
    .threads()
    .executorService(exe)
    ...