【问题标题】:Scheduling camel route for google-pubsub component为 google-pubsub 组件安排骆驼路线
【发布时间】:2019-07-11 08:45:36
【问题描述】:

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

谢谢

【问题讨论】:

  • 警告似乎是说路线已经停止。那么它不会在开始时间开始路线吗?换句话说,它不起作用吗?你用的是什么 Camel 版本?
  • 我使用的是 2.23.1 版本。我期待路由停止并且我的 Srping Boot 应用程序终止,在那里允许删除我的 Docker 容器。但是我看到 Spring Boot 应用程序在我预定的停止时间之后并没有终止。有没有办法让我终止路线而不仅仅是暂停它。谢谢
  • 此策略不会终止 JVM,JVM 会继续运行。如果要终止 JVM,则需要建立自己的策略。如果您使用 Kubernetes 之类的东西,它会安排作业,您可以使用它来设置 CRON 以了解何时运行容器。
  • “通过构建自己的策略”是指扩展类并自定义它吗? Kubernetes 调度对我也不起作用,因为 K8s 不断放入新的 Pod,因为当前的 Pod 不会终止或退出。你知道 K8s 调度器是否可以删除一个正在运行的路由,即使它还没有退出 JVM?谢谢你的cmets

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


【解决方案1】:

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

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

这里是an example,你可以参考一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-05
    • 2021-05-08
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2011-12-05
    相关资源
    最近更新 更多