gpt4 book ai didi

jms - 使用camel指定从activemq队列读取消息的超时时间

转载 作者:行者123 更新时间:2023-12-04 05:29:08 24 4
gpt4 key购买 nike

我正在使用 Camel 从 activemq 队列读取消息,处理它并将其发布到另一个队列。路线如下所示:

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

我需要指定一个超时时间,如果“incoming.queue”中没有消息超过 3 分钟,我想停止路由。我可以使用 OnCompletion() 但它会在每条消息后调用。我可以指定将消息发送到“outgoing.queue”的超时时间。有没有一种方法可以指定超时,以便如果“incoming.queue”中超过 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");
  • 使用 Camel quartz 路线和 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);
    }
  • 关于jms - 使用camel指定从activemq队列读取消息的超时时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12845381/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com