Как создать пользовательский объект Apache Camel Timer - PullRequest
0 голосов
/ 10 февраля 2020

Есть ли способ создать пользовательский Apache Таймер верблюда как объект, определенный в java коде, вместо того, чтобы определять его как шаблон строки dsl в URI конечной точки?

В документах: https://camel.apache.org/components/latest/timer-component.html есть упоминание об этом параметре запроса URI таймера:

timer (advanced) - To use a custom Timer

, но я не нашел примеров создания этого "расширенного "custom Timer.

Вместо того, чтобы указывать таймер как это:

from("timer://foo?fixedRate=true&period=60000").to("bean:myBean?method=someMethodName");

Я хотел бы указать его как:

from("timer://foo?timer=com.MyCustomTimer").to("bean:myBean?method=someMethodName");

, который будет сопровождаться:

class MyCustomTimer implements TimerInterfaceICantFind{

    public MyCustomTimer(){
        setFixedRate(true);
        setPeriod(60000);   
    }
}

Я хочу сделать это, чтобы я мог динамически указывать свойства таймера с помощью java установщиков, а не подставлять их в строящийся строковый URI.

Во время этого пишут, другие спрашивают о синтаксисе строки URI Timer, но не о пользовательских таймерах. Пример:

Apache Синтаксис URI маршрута таймера верблюда

Я видел в исходном коде верблюда, что TimerComponent.getTimer () возвращает java .util .Timer

Значит ли это, что нужно создать базовый класс java: java .util.Timer - и задать для него свойства, а не использовать верблюжью версию объекта Timer для пользовательского таймера?

timer component

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Пользовательский таймер, который упоминается в документах о верблюдах, - это не объект верблюда, а объект java .util.Timer . Это более низкий уровень и не очень удобно работать вручную на верблюжьих маршрутах. Не рекомендуется использовать.

Вы не можете создать экземпляр объекта верблюда TimerEndpoint и использовать установщики для его значений без ручного указания строки конечной точки uri.

Без предоставления что uri - camel выдает исключение с сообщением:

"endpointUri не указан и org. apache .camel.component.timer.TimerEndpoint не реализует createEndpointUri () для создания значения по умолчанию ".

Если используется верблюд 3+, доступна опция dsl конечной точки, EndpointRouteBuilder , которая может создать конечную точку таймера через компоновщик:

RouteBuilder.addRoutes(camelContext, rb ->
    rb.from(timer("myTimer").fixedRate(true).period(500).advanced().synchronous(false))
            .delay(simple("${random(250,1000)}"))
            .process(this::newOrder)
            .to(direct("cafe")));

https://github.com/apache/camel-examples/blob/master/examples/camel-example-cafe-endpointdsl/src/main/java/org/apache/camel/example/cafe/CafeRouteBuilder.java#L69

0 голосов
/ 12 февраля 2020

Если вы настаиваете, чтобы таймер генерировался динамически, возможно, вы можете взглянуть на Camel EndpointDSL, который позволяет вам динамически создавать конечные точки. Вот для таймер и пример для его использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...