gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:19:19 25 4
gpt4 key购买 nike

我有一个自定义的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com