有没有办法在没有使用java DSL指定线程休眠时间的情况下运行camel?
示例代码:
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();
}
}
}
答案 0 :(得分:2)
您需要构建自己的逻辑来检查Camel何时处于空闲状态,并且该队列中不再有消息。
您可以使用路由策略,然后在onExchangeDone中可以重置一个时钟,这是新消息进入时的事件。然后,如果在X时间段之后没有新消息,则时钟到达超时或某个时间点然后你知道要停止JVM。
此票证:https://issues.apache.org/jira/browse/CAMEL-10596类似于能够在X秒,消息或闲置X时间后自动停止的事情。所以它将在Camel 2.19开始时开箱即用。