【问题标题】:How can I run an Apache Camel route with a non-polling Consumer every few minutes如何每隔几分钟使用非轮询消费者运行 Apache Camel 路由
【发布时间】:2020-03-25 15:51:30
【问题描述】:

我有一个自定义的 Apache Camel 组件,它由一个从 DefaultConsumer 扩展而来的消费者组成,没有生产者。

我有一个 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() 。我也用 setPolicy() 尝试过 CronScheduledRoutePolicy。如果您需要按计划开始或停止路线,这些似乎很有用。他们跑我的路线一次,但不要重复。只要应用程序正在运行,我就需要它每 X 分钟运行一次路线。

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

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 扩展,因为它不会总是按计划使用。但是,如果这是解决这个问题的最佳方式,我愿意接受。

【问题讨论】:

    标签: java apache-camel quartz-scheduler alfresco


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多