java - Camel 路线执行优先级

标签 java multithreading apache-camel

我想了解 Camel 是否能够在同一进程中优先执行一条路由而不是另一条路由。

例如,我们有:

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

from("file://filestore").routeId("LOW").log("low priority");

我希望 HIGH 路线不会被 LOW 路线减速。因此,当 LOW 路由正在处理一个巨大的文件并且一个 rest 调用到达 HIGH 路由时,我希望 CPU 给 HIGH 路由更多的时间。

我正在考虑通过将路由拆分为 2 个应用程序并使用 Linux 进程优先级为 HIGH 路由分配更多时间来做到这一点。

有没有办法用 Camel 做到这一点?例如,可以玩线程优先级的东西?

谢谢你的帮助

最佳答案

看看Apache Camel/ActiveMQ priority route (初始情况不同,但解决方案也适用于您的用例):

  • 使用 JMS 并确定队列的优先级
  • 使用 SEDA 阻塞队列,同样描述 here
  • 使用重新排序器

编辑:

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

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 线程优先级的好文章 here .

关于java - Camel 路线执行优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26470638/

相关文章:

java - 这个 Java 错误是什么意思?

java - HttpMediaTypeNotAcceptableException 对于文本/纯消息响应的错误?

java - 加载 Web 应用程序属性

c - 如何创建未定义数量的线程并在 Windows 上的 c 中使用 WaitForMultipleObjects()

android - 3 秒后取消对话框 - 多次使用后我的应用程序不断崩溃

java - 如果我不关闭 java 中的 BufferedReader 会发生什么? (多线程程序中的流式读取)

java - apache Camel 混合组件

java - 接口(interface)应该放在哪里?

java - Camel 和 Google App Engine 没有 Spring?

java - Active MQ 无法在 Apache Camel 下工作