安排Google-pubsub组件的骆驼路线

时间:2019-02-18 01:19:10

标签: spring-boot apache-camel integration spring-camel

Apache Camel CronScheduledRoutePolicy不停止路由吗?

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

'{“ severity”:“ WARN”,“ message”:“ o.a.c.r.q.ScheduledRoutePolicy |路由未处于启动/暂停状态,无法停止。当前路由状态为“已停止”}}'

@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()强制停止它,该怎么办?

谢谢

1 个答案:

答案 0 :(得分:0)

完成命令后,我认为它更像是弹簧靴问题,而不是骆驼问题。

我认为使用骆驼cron组件无法完成这项工作。您可以考虑通过运行cron脚本从外部从Docker映像中将关闭命令发送到Spring Boot应用程序,从而从外部调用服务以关闭整个Spring Boot应用程序。

这里是an example,您可以参考。