Apache Camel:将bean添加到注册表以获取自定义轮询策略

时间:2015-12-07 09:40:23

标签: java spring apache apache-camel camel-ftp

我需要在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;
        }
    }
}

2 个答案:

答案 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();