spring-boot - 为 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() 来强行停止它,我该怎么做?
谢谢
解决方案
通过命令后,我认为它更像是一个弹簧靴问题而不是骆驼问题。
我不认为使用 camel cron 组件可以完成这项工作。您可以考虑从外部调用服务来关闭整个 Spring Boot 应用程序,方法是运行 cron 脚本从 Docker 映像向 Spring Boot 应用程序发送关闭命令。
这是一个示例,您可以参考。
推荐阅读
- javascript - 如何使用 Puppeteer 选择第一个选项
- r - 闪亮的过滤器将用户提供的日期与数据集日期重叠
- java - 卡在 BlueJ 项目中
- docker - 如何在 Ubuntu 上安装 Blockstack 浏览器
- ipv6 - IPv6 的 pcap_compile
- powershell - Start-Process 不能很好地与 Start-Sleep 配合使用
- python - 这段代码的目的是什么,我不明白
- python - Numpy np:ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
- crystal-reports - Crystal Report Query 的变化取决于参数
- html - 引导列正在切断我行的左边缘