控制Camel路由的启动和关闭

时间:2012-01-31 11:19:26

标签: grails activemq routes apache-camel

我正在尝试使用camel路由向activemq队列进行一种轮询服务。

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

我的路线配置设置如下。

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

}

我基本上试图做.suspendRoute(“daemonRoute”)和.resumeRoute(“daemonRoute”)中间有一段时间。虽然在发出suspendRoute后路线没有停止。

任何人都试过这个?,我已经读过一些关于需要杀死正在进行的交换或类似事情的内容。

2 个答案:

答案 0 :(得分:3)

如果您只是试图定期处理队列中的所有消息,那么另一个选项(而不是启动和停止路由)是使用计时器和polling consumer 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)

请参阅此常见问题解答如何停止/暂停路线的路线 http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html

另一种方法是使用路线政策 http://camel.apache.org/routepolicy

例如,我们使用开箱即用的限制路由策略,看看它是如何实现的,你也可以为你的路由做类似的事。