当前位置: 首页 > 知识库问答 >
问题:

如何创建自定义的阿帕奇骆驼计时器对象

许毅
2023-03-14

有没有一种方法可以创建一个定制的ApacheCamel定时器作为java代码中定义的对象,而不是在endpointURI中将其定义为dsl字符串模式?

在文档中:https://camel.apache.org/components/latest/timer-component.html这里提到了这个定时器URI查询参数:

但我还没有找到创建“高级”自定义计时器的示例。

而不是像这样指定计时器:

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 setter动态指定计时器属性,而不是将它们替换为正在构造的字符串URI。

在撰写本文时,其他人已经询问了计时器URI字符串语法,但没有询问自定义计时器。例如:

Apache 骆驼计时器路由 URI 语法

我在camel源代码中看到,好像TimerComponent.getTimer()正在返回一个java.util.Timer

这是否意味着需要创建核心 java 类:java.util.Timer - 并在其上设置属性,而不是将计时器对象的驼峰版本用于自定义计时器?

共有2个答案

宰父君昊
2023-03-14

如果您坚持动态生成计时器,也许您可以看看Camel EndpointDSL,它允许您动态构建endpoint。这里是定时器和使用它的示例

姚新霁
2023-03-14

camel文档中引用的自定义定时器不是camel对象,而是java.util.Timer对象。在骆驼路线上手动操作是较低级的,并且对用户不友好。不建议使用。

如果不手动指定终结点字符串 uri,则无法实例化骆驼 TimerEndpoint 对象并对其值使用 setter。

如果未提供该 uri - 骆驼将引发异常并显示以下消息:

未指定endpointUri,并且org . Apache . camel . component . timer . timer endpoint未实现createEndpointUri()来创建默认值。

如果使用 camel 3,则有一个endpoint dsl 选项可用,即endpoint路由构建器,该选项可以通过生成器创建计时器endpoint:

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

 类似资料:
  • 我试图使用Apache Camel Quartz2实现一个调度器,它每分钟执行一次路由,并按预期执行一些任务。我使用spring DSL实现与apache camel相关联的路由,如下所示: 根据日志,它不会记录为路由记录的消息,例如Direct:DomainsWithFTPUsers等等。请指导如何实现同样的目标。

  • 遵循官方文件(https://camel.apache.org/manual/component-dsl.html#_using_component_dsl)我创建了以下代码: 但是中的告诉我: 并且中的特性不建议导入相应的库。 有人能给我指出正确的方向吗? 我必须理解的概念才能做到这一点吗?

  • 考虑到apache Camel,我有一个问题:是否可以通过代码来创建全局拦截器,例如AOP?拦截器应该跳过endpoint还是模仿endpoint? 提前致谢

  • 我们需要的是直接的API来设置和使用集群消息队列。我们最初的计划是使用Camel在集群JMS或ActiveMQ队列上进行消费/生产。Kafka如何使这项任务变得更容易?在任何一种情况下,应用程序本身都将在WebLogic服务器上运行。 消息传递将是点对点类型,其中有多个相同服务的实例在运行,但根据负载平衡策略,只有一个实例应该处理消息并发出结果。消息队列也是群集的,因此服务实例或队列实例的失败都不

  • Java-Spring-骆驼 我想用服务列表发起骆驼路线。 想做下面的事情,但是< code>from方法似乎不是一个生产者。如何定义动态生产者?

  • 我对骆驼生产商有很好的了解,但我不能对各种骆驼消费者保持清醒的头脑。特别是事件驱动消费者和轮询消费者,camel如何知道为这些消费者调用回调? 消费者的一般流量是多少?