我正在尝试使用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后路线没有停止。
任何人都试过这个?,我已经读过一些关于需要杀死正在进行的交换或类似事情的内容。
答案 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
例如,我们使用开箱即用的限制路由策略,看看它是如何实现的,你也可以为你的路由做类似的事。