Apache Camel: добавить компонент в реестр для индивидуальной стратегии опроса
Мне нужно реализовать кастом 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 ответа
Как я использовал org.apache.camel.main.Main
Я не мог найти способ создать SimpleRegistry, как упомянул Клаус, и передать его основному объекту.
Только что узнал, что есть метод bind
в Main
класс для передачи имени бина и объекта бина.
Main main = new Main();
main.addRouteBuilder(new MyTestRouteBuilder());
main.enableHangupSupport();
main.bind("myPoll", new MyPollStrategy());
main.run();
Вы можете создать экземпляр SimpleRegistry
где вы можете добавить свой пользовательский компонент. А затем передать простой экземпляр реестра, где вы создаете CamelContext с new DefaultCamelContext(myRegistry)
конструктор.
Если у вас есть книга "Верблюд в действии", см. Главу "Бобы", в которой все это объясняется подробнее.
На веб-сайте есть немного деталей по адресу: http://camel.apache.org/registry.html