簡體   English   中英

使用Apache Camel Java DSL從activemq接收消息

[英]Receive messages from activemq using apache camel java DSL

  • 我正在使用apache駱駝來接收隊列中的所有消息。 但是我需要提到運行駱駝上下文的線程的睡眠時間。
  • 現在的問題是它只消耗一些消息,即。 在指定的睡眠時間內。
  • 如果我增加了睡眠時間,則它將路由所有消息,但它會等到睡眠時間結束后才終止程序。
  • 我需要的是,駱駝應該路由隊列中的所有消息,然后立即終止。

有沒有任何方法可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM