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

如何每隔几分钟与非轮询使用者运行一次Apache Camel路由

东方英豪
2023-03-14

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

我有一个Spring Boot应用程序,与其他几个骆驼路线,都工作得很好。

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);
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扩展,因为它并不总是按计划使用。但是,如果这是解决这个问题的最好方法,我对此持开放态度。

共有1个答案

鲁涵映
2023-03-14

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

//trigger every 60 seconds
from("timer:timerName?period=60000")
  .routeId("alfrescoAuditLogToElastic")
  .to("alfaudit://http://acs.local:8080?username=" + user + "&password=" + password)
  .bean("alfAuditLogEntryEnricher")
  ...
 类似资料:
  • 问题内容: 我想尝试通过以下方式使用@Schedule批注: 根据日志,CronService运行良好,但是计划的任务“ runsEveryMinute”不起作用。 使用EJB计划任务如何工作? 问题答案: 按照该Javadoc中的注释,默认值是: 除小时,分钟和秒外的所有字段;和 默认情况下为小时,分钟和秒。 通过将小时值保留为默认值,它要求计时器在午夜之后每分钟运行一小时(即00:00、00:

  • 问题内容: 我正在cronjob中运行PHP脚本,我想每5分钟发送一封电子邮件 我当前的(crontab)cronjob: cronmail.php如下: 但是我没有在30分钟内收到此配置的电子邮件。 问题答案: 在文件中,这些字段是: 每小时的分钟。 一天中的小时。 一个月中的某天。 一年中的月份。 一周中的天。 所以: 表示每小时10分钟执行一次。 如果您希望每五分钟使用一次,请使用以下任一方

  • 问题内容: 我正在使用Python和PyGTK。我对运行某个功能感兴趣,该功能每隔几分钟从串行端口获取数据并保存一次。 当前,我正在时间库中使用sleep()函数。为了能够进行处理,我将系统设置如下: 这种设置使我从串口读取数据的间隔为5分钟。我的问题是我希望能够让我的readserial()函数每隔5分钟暂停一次,并且能够一直执行操作,而不是使用time.sleep()函数。 关于如何解决这个问

  • 问题内容: 我在Django中的应用程序 可以 创建一些 非常大的SQL查询。我目前使用一个对象,作为我需要的数据,然后使用一个,以返回要显示给用户的内容。 显然,我可以让用户等待一分钟,同时正在执行这些许多查询集并从数据库中提取查询,然后返回此单一HTML页面。 理想情况下,我想在需要时更新页面,例如: 这可能吗? 问题答案: 我最近发现HttpResponse可以是生成器: 这将逐步将结果返回

  • 如何每5分钟左右运行一个PHP文件?我尝试使用cron,但它似乎不起作用。假设我想让我的网站运行一个播放声音的php文件。如何使php文件每5分钟运行一次,使声音每5分钟播放一次。我知道JavaScript可以做到这一点,因此函数可以按设定的间隔运行,但我希望文件也这样做。 这样做的原因是我正在创建一个网站,我希望用户得到实时通知。为了做到这一点,我需要运行php文件,以便它可以检测用户通知的更改

  • 使用React中的上下文API时,是否可以每隔几秒钟设置一次自动刷新间隔?getData()函数在API上运行axios.get(),但当我在useEffect钩子的返回函数中尝试setInterval()和cleanup时,它仍然不会清理间隔。getData()将当前变量和加载变量设置为应用程序级状态。 我只是想每隔几秒钟刷新并重新执行API调用。我尝试使用useRef()钩子,并使它开始工作,