我是Apache Camel的新手,我试图在一个简单的项目中理解和使用Polling Consumer EIP,但我觉得有点迷失.. 有人可以帮我解释一下,或者用一点工作的例子来帮助我。
任何帮助将不胜感激 提前致谢
答案 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"/>
的更多信息