2014-10-20 122 views
2

我想了解,如果駱駝能夠在同一過程中優先於另一個路由執行。駱駝路線執行優先

例如,我們有:

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

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

我想高級路線不被低途徑減緩。所以當一個巨大的文件正在被LOW路由處理並且一個休息呼叫到達HIGH路由時,我想讓CPU給更多的時間給HIGH路由。

我想通過在2個應用程序中拆分路線並使用Linux進程優先級爲HIGH路線分配更多時間。

有沒有辦法與駱駝做到這一點?例如,玩什麼線程優先?

感謝您的幫助

回答

2

看一看Apache Camel/ActiveMQ priority route(該INTIAL情況是不同的,但解決方案同樣適用於你的使用情況):

  • 使用JMS和priorize隊列
  • 使用一個SEDA阻塞隊列爲還描述here
  • 使用再順

編輯:

作爲附加選項使用ExecutorService與自定義ThreadFactory並設置線程的優先級,例如:

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

+0

感謝您的回覆。您所描述的解決方案允許優先考慮路線而不是另一個路線。但問題是:如果長時間處理(如解析一個非常大的文件)花費超過5分鐘時間,並且在解析開始後優先呼叫到達,那麼這種解決方案之一如何能夠幫助爲優先級呼叫提供更多資源?根據我的理解,這些解決方案允許按優先級進行排序,但不能爲更具體的一條路線分配更多資源。 – Thomas 2014-10-22 07:42:38

+0

@Thomas我添加了一個'ExecutorService'選項 – 2014-10-23 18:40:32

+0

這似乎很棒!感謝您的幫助 – Thomas 2014-10-23 20:25:39