java - 我如何每隔几分钟运行一次带有非轮询消费者的 Apache Camel 路由

标签 java apache-camel quartz-scheduler alfresco

我有一个自定义的 Apache Camel 组件,它由一个从 DefaultConsumer 扩展而来的 Consumer 组成,没有 Producer。

我有一个 Spring Boot 应用程序和其他几个 Camel 路由,都可以正常工作。

我想修改现有路由,使其每 X 分钟调用一次自定义组件。该路线运行一次时工作正常。它看起来像这样:

JacksonDataFormat enrichedAuditLogEntryFormat = new JacksonDataFormat(EnrichedAuditLogEntry.class);

from("alfaudit://http://acs.local:8080?username=" + user + "&password=" + password)
        .routeId("alfrescoAuditLogToElastic")
        .bean("alfAuditLogEntryEnricher")
        .marshal(enrichedAuditLogEntryFormat)
        .setHeader("indexId", header(AlfAuditConsumer.AUDIT_LOG_ENTRY_ID))
        .to("elasticsearch-rest://elasticsearch?operation=Index&indexName=" + AUDIT_LOG_INDEX + "&indexType=" + AUDIT_LOG_TYPE);

我正在为如何实现时间表而苦恼。我试过定义一个 SimpleScheduledRoutePolicy,然后在路线上使用 setPolicy()。我还尝试了 CronScheduledRoutePolicy 和 setPolicy()。如果您需要按计划开始或停止路线,这些似乎很有用。他们跑我的路线一次,但不要重复。只要应用程序正在运行,我就需要它每隔 X 分钟运行一次路线。

接下来,我尝试添加一个调用现有路由的 quartz 路由,如下所示:

from("quartz2://fetchaudit?cron=0+0/5+*+*+*+?")
        .process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                CamelContext context = exchange.getContext();
                context.startRoute("alfrescoAuditLogToElastic");
            }
        });

这在第一次工作时有效,但是当下次触发作业时,它会尝试启动已经运行的路由。

我希望避免修改我的自定义组件以从 DefaultScheduledPollConsumer 扩展,因为它不会总是按计划使用。但是,如果这是解决这个问题的最佳方式,我愿意接受。

最佳答案

恐怕我对您的自定义组件一无所知。但是如果它能够被用作生产者和消费者,你可能会尝试这样的事情。请注意,作为生产者,您可以根据需要决定忽略整个 Message

//trigger every 60 seconds
from("timer:timerName?period=60000")
  .routeId("alfrescoAuditLogToElastic")
  .to("alfaudit://http://acs.local:8080?username=" + user + "&password=" + password)
  .bean("alfAuditLogEntryEnricher")
  ...

关于java - 我如何每隔几分钟运行一次带有非轮询消费者的 Apache Camel 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60852411/

相关文章:

apache-camel - Camel 和代码覆盖率

java - Quartz 作业已完成但线程仍处于阻塞状态

java - Camel : Mock a processor to test Route

java - 如何打开在Docker容器上运行的应用程序的远程调试?

java - 从 hashmap Java 添加元素到 CSV

java - Criteria API - OR 比较器,比较次数未知

java - Apache Camel 2.12 : Adding bean to already existing context

tomcat - 是否可以在 Tomcat 上下文停止时关闭 QuartzScheduler?

java - Spring Boot 不替换 application.properties 文件中的环境变量

java - 录音机状态无效(文件路径错误?)