- 我使用apache駱駝來接收隊列中的所有消息。但我需要提到運行駱駝上下文的線程睡眠時間。
- 現在的問題是它只消費一些消息,即。在 指定的睡眠時間內。
- 如果我增加睡眠時間,那麼它會路由所有消息,但它會等待,直到完成休眠時間才能終止程序。
- 我需要的是,駱駝應該路由隊列中的所有消息 ,然後它應該立即終止。
有什麼辦法可以在不指定線程休眠時間的情況下使用java DSL來運行駱駝?使用apache camel接收來自activemq的消息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();
}
}
}
爲什麼不使用destinationInterceptors http://activemq.apache.org/virtual-destinations.html或http://activemq.apache.org/broker-camel-component.html在代理端?您可以在使用destinationInterceptors時編輯配置,而無需在使用此插件時重新啓動代理http://activemq.apache.org/runtime-configuration.html –
您不需要進入睡眠狀態。你只需要確保CamelContext永遠運行。 http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html –
@SoucianceEqdamRashti但路由中的所有消息的執行需要終止 –