2012-01-31 66 views
0

我想對使用駱駝路由的activemq隊列進行一種輪詢服務。控制駱駝路由的啓動和關閉

我正在使用路由和routing-jsm插件的grails。

我有我的路線配置設置像這樣。

class QueueRoute { 
def configure = { 
    from("activemq:daemon").routeId("daemonRoute") 
    .noAutoStartup() 
    .shutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly) 
    .to('bean:daemonCamelService?method=receive') 
    .end() 
} 

}

,我基本上是試圖用一些時間插圖中做.suspendRoute( 「daemonRoute」)和.resumeRoute( 「daemonRoute」)。雖然在發出suspendRoute之後路線並未停止。

任何人都試過這個?,我已經讀過一些關於需要殺死正在進行的交換或類似的事情。

回答

3

如果您只是想要定期處理隊列中的所有消息,則另一個選項(而不是啓動和停止路由)是使用定時器和bean來檢索隊列中的所有消息。 。

from("timer://processQueueTimer?fixedRate=true&period=30000") 
    .to("bean:myBean?method=poll"); 

public class MyBean { 

    public void poll() { 
    // loop to empty queue 
    while (true) { 
     // receive the message from the queue, wait at most 3 sec 
     Object msg = consumer.receiveBody("activemq:queue:daemon", 3000); 
     if (msg == null) { 
      // no more messages in queue 
      break; 
     } 

     // send it to the next endpoint 
     producer.sendBody("bean:daemonCamelService?method=receive", msg); 
    } 
    } 
} 
+1

這僅輪詢從隊列1個消息,埃弗特第30秒,而你沒有提供tineout選項pollEnrich這是最好的做法,這意味着你最終擁有它阻塞(線程),如果沒有消息是在隊列中。消息傳遞不是很好的解決方案。 – 2012-02-01 18:31:24

+0

好點克勞斯,我認爲這將投票,直到沒有消息返回並返回一個列表,但我明白你的意思......每一個通過只收到一個消息。你認爲這將是一個有效的增強? – 2012-02-02 02:01:26

+0

更新的答案使用bean輪詢消費者而不是pollEnrich()...每個Claus的評論 – 2012-02-02 02:15:34