Apache Camel:轮询消费者

时间:2014-02-26 15:40:59

标签: apache-camel polling producer-consumer

我是Apache Camel的新手,我试图在一个简单的项目中理解和使用Polling Consumer EIP,但我觉得有点迷失.. 有人可以帮我解释一下,或者用一点工作的例子来帮助我。

任何帮助将不胜感激 提前致谢

2 个答案:

答案 0 :(得分:2)

对于大多数用例,您可以通过在路由中的from()子句中定义消费者来创建消费者...

from("activemq:inbox").to(new MyProcessor());

但是,您也可以编写自己的POJO轮询消费者逻辑,以便更好地控制消费者逻辑......只需使用计时器定期启动它并按如下方式调用receive()方法:

from("timer://foo?period=5000").bean(MyBean, "processQueue");

public void processQueue() {
    while (true) {
        // receive the message from the queue, wait at most 3 sec
        String msg = consumer.receiveBody("activemq:inbox", 3000, String.class);
        if (msg == null) {
            // no more messages in queue
            break;
        }

        // do something with body
    }
}

有关详细信息,请参阅文档:http://camel.apache.org/polling-consumer

答案 1 :(得分:1)

Camel支持使用PollingConsumer接口从EIP模式实现轮询消费者,该接口可以通过Endpoint.createPollingConsumer()方法创建。

这也称为同步接收器,因为接收器线程会阻塞,直到收到消息。我们将其称为轮询消费者,因为接收者轮询消息,处理消息,然后轮询另一个消息。为方便起见,消息传递API通常提供 receive()方法,除了 receiveNoWait()接收(0)等方法之外,该方法会阻止消息传递)如果没有消息可以立即返回。

例如

ActiveMq Consumer

<from uri="activemq:someQueue"/>
<to uri="direct:somepath"/>

定期消费者

<from uri="timer://foo?period=5000"/>
 <to uri="direct:somepath"/>

有关Polling Consumer

的更多信息