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