首页 > 解决方案 > 为 google-pubsub 组件安排骆驼路线

问题描述

Apache Camel CronScheduledRoutePolicy 不停止路线?

我正在尝试启动和停止从 google-pubsub 组件读取并推送到 JDBC 数据源(oracle)的路由。我只想在一天中的某些时间执行此操作,因为 Oracle 数据库会在每天晚上 10 点到 12 点之间关闭,在此期间我不希望我的路由继续处理传入的 pubsub 消息并希望它停止。但是当我尝试它时,停止时间的路线说:

'{"severity":"WARN","message":"oacrqScheduledRoutePolicy | 路由未处于启动/暂停状态,无法停止。当前路由状态为已停止"}'

@Override
    public void configure() {
        CronScheduledRoutePolicy routePolicy = new CronScheduledRoutePolicy();
        routePolicy.setRouteStartTime("0 15 00 * * ?");
        routePolicy.setRouteStopTime("0 00 22 * * ?");
        System.out.println("am here!!");
        onException(Exception.class)
                .log(LoggingLevel.ERROR," Error processing message: ${header['CamelGooglePubsub.MessageId']} : ${exception}" )
                .to("log:app_error.log?level=DEBUG&showAll=true&showException=true")
                .markRollbackOnlyLast()
                .end();



        CamelContext camelContext= getContext();
        System.out.println("Route Status is" + camelContext.getRouteStatus("{{routeID}"));
        from("google-pubsub:{{google_project_name}}:{{google_pubsub_subscription}}"+
                "?concurrentConsumers={{concurrent_consumers}}"+
                "&maxMessagesPerPoll={{max_messages_per_poll}}"+
                "&connectionFactory=#googlePubsubConnectionFactory")
                .routeId("{{routeID}")
                .routePolicy(startPolicy)
                .noAutoStartup()

我希望路线在上午 12:15 开始 (routePolicy.setRouteStartTime("0 15 00 * * ?");

并在 routePolicy.setRouteStartTime("0 00 22 * * ?");

我这样做是否正确,或者应该在路线上使用 process() 来强行停止它,我该怎么做?

谢谢

标签: spring-bootapache-camelintegrationspring-camel

解决方案


通过命令后,我认为它更像是一个弹簧靴问题而不是骆驼问题。

我不认为使用 camel cron 组件可以完成这项工作。您可以考虑从外部调用服务来关闭整个 Spring Boot 应用程序,方法是运行 cron 脚本从 Docker 映像向 Spring Boot 应用程序发送关闭命令。

这是一个示例,您可以参考。


推荐阅读