【发布时间】: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