[英]Receive messages from activemq using apache camel java DSL
有沒有任何方法可以使用Java DSL在不指定線程睡眠時間的情況下運行駱駝?
樣例代碼:
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開始使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.