Планирование верблюжьего маршрута для компонента google-pubsub

Apache Camel CronScheduledRoutePolicy не останавливает маршрут?

Я пытаюсь запустить и остановить свой маршрут, который считывается из компонента google-pubsub и отправляется в источник данных JDBC (оракул). Я хочу делать это только в определенное время дня, так как база данных 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 () на маршруте, чтобы остановить его принудительно, как я могу это сделать?

Спасибо


person Tabber    schedule 18.02.2019    source источник
comment
ПРЕДУПРЕЖДЕНИЕ, кажется, просто говорит о том, что маршрут уже остановлен. Так не будет ли он начинать маршрут во время начала? Иными словами, разве не работает? А какую версию Camel вы используете?   -  person Claus Ibsen    schedule 18.02.2019
comment
У меня версия 2.23.1. Я ожидал, что маршрут остановится и мое приложение Srping Boot завершится, разрешив удаление моего контейнера Docker. Но я вижу, что приложение Spring Boot не закрывается после запланированного времени остановки. Могу ли я прервать маршрут, а не просто приостановить его? Спасибо   -  person Tabber    schedule 18.02.2019
comment
Эта политика не завершает работу JVM, JVM продолжает работать. Вам необходимо создать собственную политику, если вы хотите завершить работу JVM. Если вы используете что-то вроде Kubernetes, у него есть запланированные задания, которые вы можете использовать для настройки CRON, когда запускать контейнеры.   -  person Claus Ibsen    schedule 18.02.2019
comment
Под построением собственной политики вы подразумеваете расширение класса и его настройку? Планирование Kubernetes не работает для меня, так как K8s продолжает добавлять новые поды, поскольку текущие не завершаются и не завершаются. Вы знаете, может ли планировщик K8s удалить текущий маршрут, даже если он не вышел из JVM? Спасибо за ваши комментарии   -  person Tabber    schedule 19.02.2019


Ответы (1)


После выполнения команды я думаю, что это больше похоже на вопрос о весенней загрузке, а не на вопрос о верблюде.

Я не думаю, что использование компонента camel cron может справиться с этой задачей. Вы можете рассмотреть возможность вызова службы извне для завершения работы всего приложения загрузки Spring, запустив сценарий cron для отправки команды завершения работы приложению загрузки Spring из образа докера.

Вот пример, на который можно взять ссылку.

person Willem Jiang    schedule 26.02.2019