Como criar um objecto de temporizador de Camelos Apache personalizado

Existe uma maneira de criar um temporizador de camelo Apache personalizado como um objeto definido no código java ao invés de defini-lo como um padrão de cadeia dsl no URI endpoint?

nos documentos: https://camel.apache.org/components/latest/timer-component.html {[8] } há menção desta consulta de tempo URI param:

timer (advanced) - To use a custom Timer

mas não encontrei exemplos de criação desse temporizador personalizado "avançado".

em vez de especificar um temporizador como isto:

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

gostaria de especificá-lo como:

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

que seria acompanhado por:

class MyCustomTimer implements TimerInterfaceICantFind{

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

eu estou querendo fazer isso para que eu possa especificar propriedades do temporizador dinamicamente através de setters java em vez de substituí-los em um URI string sendo construído.

no momento desta escrita, outros pediram a sintaxe de timer URI string, mas não de temporizadores personalizados. Ex:

sintaxe URI do temporizador de Camelos Apache

Vi no código fonte do camelo, parece TimerComponent.getTimer () está retornando um java.util .Temporizador

isso implica que é preciso criar a classe java Central: java.util.Temporizador-e definir propriedades nele em vez de usar uma versão camelo de um objeto temporizador para um temporizador personalizado?

timer component

Author: Olaf Kock, 2020-02-10

2 answers

O temporizador personalizado a que se refere nos documentos do camelo não é um objecto de camelo, mas sim um java .util.Temporizador objecto. É de nível mais baixo e não fácil de usar para trabalhar manualmente em rotas de camelos. Não é recomendado usar.

Não se pode instanciar um objecto de camelo TimerEndpoint e usar setters para os seus valores sem também especificar manualmente o parâmetro de avaliação uri.

Sem que o uri-camelo abra uma excepção com a mensagem:

"endpointUri não está especificado e org.Apache.camelo.componente.temporizador.TimerEndpoint não implementa createEndpointUri () para criar um valor padrão".

Se usando o camel 3+ existe uma opção DSL endpoint, Endpoint Builder , que pode criar um endpoint do temporizador através de um construtor:

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

 1
Author: TheBitMuncher, 2020-04-17 13:52:35
Se insiste em que o temporizador seja gerado dinamicamente, talvez possa dar uma vista de olhos no Camel Endpointsl, que lhe permite construir endpoints dinamicamente. Aqui está para temporizador e um exemplo para usá-lo.
 0
Author: Omar Al-Safi, 2020-02-12 13:43:08