gpt4 book ai didi

java - 使用 apache Camel java DSL 接收来自 activemq 的消息

转载 作者:行者123 更新时间:2023-12-02 02:59:29 26 4
gpt4 key购买 nike

  • 我正在使用 apache Camel 接收来自队列的所有消息。但是我需要提及线程的 sleep 时间来运行 Camel 上下文。
  • 现在的问题是它只消耗一些消息,即。内指定 sleep 时间。
  • 如果我增加 sleep 时间,那么它将路由所有消息,但是它会等到 sleep 时间完成才终止程序。
  • 我需要的是, Camel 应该路由队列中的所有消息然后它应该立即终止。

有没有办法使用java DSL来运行camel而不指定线程 sleep 时间?

示例代码:

import javax.jms.ConnectionFactory;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.impl.DefaultCamelContext;

public class SplitJson {

public static void main(String[] args) {

try {
CamelContext context = new DefaultCamelContext();
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin", "admin",
ActiveMQConnection.DEFAULT_BROKER_URL);
context.addComponent("test-jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
context.addRoutes(new RouteBuilder() {
public void configure() {
from("test-jms:queue:testMQDestination")
.choice()
.when().jsonpath("$.[?(@.Status == 'YetToStart')]")
.to("test-jms:queue:YetToStart")
.when().jsonpath("$.[?(@.Status == 'Started')]]")
.to("test-jms:queue:Started")
.when().jsonpath("$.[?(@.Status == 'Completed')]]")
.to("test-jms:queue:Completed")
.otherwise()
.to("test-jms:queue:Others")
.end();
}
});
context.start();
Thread.sleep(10000);
context.stop();
System.out.println("Done");
} catch (Exception e) {

e.printStackTrace();
}

}

}

最佳答案

您需要构建自己的逻辑来检查 Camel 何时空闲并且该队列上没有更多消息。

您可以使用路由策略,然后在 onExchangeDone 中您可以重置时钟,这是新消息传入时的事件。然后,如果在 X 时间段后没有新消息,则时钟会超时或发生其他情况然后您就知道要停止 JVM。

这张票:https://issues.apache.org/jira/browse/CAMEL-10596是关于能够在 X 秒、消息或闲置 X 时间后自动停止的东西。因此它将在 Camel 2.19 中开箱即用。

关于java - 使用 apache Camel java DSL 接收来自 activemq 的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42553493/

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