【问题标题】:Specifying timeout for reading messages from activemq queue using camel使用骆驼指定从activemq队列中读取消息的超时
【发布时间】:2012-10-02 11:04:11
【问题描述】:

我正在使用骆驼从 activemq 队列中读取消息,对其进行处理并将其发布到另一个队列。路线如下:

from("jms:incoming.queue")
.process(new MyProcessor())
.to("jms:outgoing.queue");

我需要指定一个超时时间,如果“incoming.queue”中超过 3 分钟没有消息,我想停止路由。我可以使用 OnCompletion() 但在每条消息之后都会调用它。我可以指定将消息发送到“outgoing.queue”的超时时间。有没有办法可以指定超时,如果“incoming.queue”中没有消息超过 3 分钟,我可以停止路由?

提前感谢您的帮助。

【问题讨论】:

  • 为什么要停止超过 3 分钟不活跃的路线?您可以在某处写入最后处理时间,并与使用计时器组件推送的其他路由进行检查。
  • @white - 要求是“incoming.queue”中的消息需要在非工作时间处理,比如晚上 8:00。路由此时需要处理队列中的所有消息。处理完所有消息后,需要停止路由,以免消息在第二天开始到达队列时立即开始处理。该路线需要在晚上 8:00 PM 重新开始。有简单的方法吗?

标签: jms activemq apache-camel


【解决方案1】:

根据您上面的评论,您似乎只是希望按计划开始和停止路线。您可以使用石英作业来调用 jms 路由上的 start 和 stop 方法。如果您愿意,您甚至可以使用石英端点将石英逻辑设为路由。

【讨论】:

  • 谢谢。我喜欢使用 CronScheduledRoutePolicy 来启动和停止路由,因为它更加紧凑,并且所有内容都可以指定为单个路由的一部分。
【解决方案2】:

我能想到的两个选项...

  1. 使用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");         
    
  2. 使用骆驼石英路线和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);
    }
    

【讨论】:

  • 谢谢。我想我可以使用 CronScheduledRoutePolicy 来满足我的要求。唯一的事情是我需要在停止路由之前留出足够的时间,以便处理“incoming.queue”中的所有消息。如果可以指定从队列中读取消息的超时时间并在超时发生时停止路由,那就更好了。
  • 查看我的更新答案...选项 #2 让您可以更好地控制超时等方面。
猜你喜欢
  • 2013-01-24
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多