我需要在PollingConsumerPollStrategy
内的路线上实施自定义RouteBuilder
实施。我发现的例子使用spring来创建一个bean,但我没有在我的项目中使用Spring。
如何将MyPollStrategy
添加到注册表并将其用作pollStrategy = #myPoll?
public class MyFtpServiceBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
// Want to add to below route &pollStrategy=#myPoll
from("sftp://tmpserver.example.com:22//tmp/testfolder?password=xxxxxx&username=tmpuser")
.routeId("testRoute")
.to("file:C:/tmp/testfolder")
}
private class MyPollStrategy implements PollingConsumerPollStrategy {
public boolean begin(Consumer consumer, Endpoint endpoint) {
return true;
}
public void commit(Consumer consumer, Endpoint endpoint, int polledMessages) {
if (polledMessages > maxPolls) {
maxPolls = polledMessages;
}
latch.countDown();
}
public boolean rollback(Consumer consumer, Endpoint endpoint, int retryCounter, Exception cause) throws Exception {
return false;
}
}
}
答案 0 :(得分:2)
您可以创建SimpleRegistry
的实例,您可以在其中添加自定义bean。然后将简单的注册表实例传递到使用new DefaultCamelContext(myRegistry)
构造函数创建CamelContext的位置。
如果你有一本Camel in Action书的副本,请参阅bean章节,它会详细解释这一点。
在网站上有一些详细信息:http://camel.apache.org/registry.html
答案 1 :(得分:0)
当我使用org.apache.camel.main.Main
时,我找不到像Claus提到的那样创建SimpleRegistry并将其传递给主对象的方法。
刚刚发现bind
类中有一个方法Main
来传递bean名称和bean对象。
Main main = new Main();
main.addRouteBuilder(new MyTestRouteBuilder());
main.enableHangupSupport();
main.bind("myPoll", new MyPollStrategy());
main.run();