dunn less
dunn less

Reputation: 623

Controlling Start-Up and Shutdown of Camel Routes

I am trying to make kind of a polling service towards a activemq queue using camel routes.

I am using routing and routing-jsm plugins for grails.

I have my route configuration set like this.

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

}

and I am basically trying to do .suspendRoute("daemonRoute") and .resumeRoute("daemonRoute") with some time inbetween. Though after issuing suspendRoute the route is not stopped.

Anyone have tried this?, I have read something about needing to kill the exchange in progress or something similar.

Upvotes: 0

Views: 3938

Answers (2)

Ben ODay
Ben ODay

Reputation: 21015

if you are just trying to periodically process all messages in a queue, then another option (instead of starting and stopping the route) is to use a timer and a polling consumer bean to do retrieve all the messages in the queue...

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);
    }
  }
}

Upvotes: 3

Claus Ibsen
Claus Ibsen

Reputation: 55555

See this FAQ how to stop/suspend a route from a route http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html

An alternative is to use a route policy http://camel.apache.org/routepolicy

For example as we do with the throttling route policy that is provided out of the box, take a look at how its implemented, you can do similar for your route as well.

Upvotes: 1

Related Questions