我使用camel从activemq队列中读取消息,处理它并将其发布到另一个队列。该路线如下:
from("jms:incoming.queue")
.process(new MyProcessor())
.to("jms:outgoing.queue");
我需要指定一个超时,如果“incoming.queue”中没有消息超过3分钟,我想停止该路由。我可以使用OnCompletion()但它会在每条消息后调用。我可以指定发送消息到“outgoing.queue”的超时。有没有办法可以指定超时,如果“incoming.queue”中没有超过3分钟的消息,我可以停止路由吗?
先谢谢你的帮助。
答案 0 :(得分:3)
我能想到的两个选择......
使用CronScheduledRoutePolicy在指定时间自动开始/停止您的路线...
CronScheduledRoutePolicy myPolicy = new CronScheduledRoutePolicy();
myPolicy.setRouteStartTime("0 20 * * * ?");
myPolicy.setRouteStopTime("0 0 * * * ?");
from("jms:incoming.queue")
.routePolicy(myPolicy).noAutoStartup()
.process(new MyProcessor())
.to("jms:outgoing.queue");
使用骆驼石英路线和polling consumer按时间表排空队列
MyCoolBean cool = new MyCoolBean();
cool.setProducer(template);
cool.setConsumer(consumer);
from("quartz://myGroup/myTimerName?cron=0+20+*+*+*+?")
.bean(cool);
//MyCoolBean snippet
while (true) {
// receive the message from the queue, wait at most 60s
Object msg = consumer.receiveBody("jms:incoming.queue", 60000);
if (msg == null) {
break;
}
producer.sendBody("jms:outgoing.queue", msg);
}
答案 1 :(得分:0)
根据您上面的评论,您似乎只是想按计划开始和停止路线。您可以使用石英作业来调用jms路径上的启动和停止方法。如果您愿意,甚至可以使用石英端点使石英逻辑成为路径。