Запланируйте мероприятие через 10 минут после получения сообщения Kafka - PullRequest
0 голосов
/ 06 мая 2020

У меня есть приложение Java, в котором есть потребитель Kafka. Он получает сообщения, сохраняет их в базе данных и отправляет их для выполнения другому приложению через Rest API. Я хочу запланировать событие через 10 минут после получения каждого сообщения, чтобы проверить статус сообщения, и если сообщение не обработано, его нужно отбросить.

Как лучше всего реализовать это ? Любая библиотека или фреймворк?

1 Ответ

0 голосов
/ 06 мая 2020

есть различные методы, которые вы можете использовать (задание cron):

1) используйте этот пример кода new java.util.Timer().schedule ( javado c):

new java.util.Timer().schedule( 
        new java.util.TimerTask() {
            @Override
            public void run() {
                // your code here
            }
        }, 
        5000 
);

2) используйте Executors.newSingleThreadScheduledExecutor():

// When your program starts up
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();

// then, when you want to schedule a task
Runnable task = ....    
executor.schedule(task, 5, TimeUnit.SECONDS);

// and finally, when your program wants to exit
executor.shutdown();

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

3) использование cron4j для cron expessions и планирования cronTrigger.getExpressionSummary():

 CronTrigger t = new CronTrigger();
 t.setCronExpression("0 30 10-13 ? * WED,FRI");
 System.out.println(""+t.getExpressionSummary());

4) пример использования javax.swing.Timer:

Timer timer = new Timer(3000, new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent arg0) {
    // Code to be executed
  }
});
timer.setRepeats(false); // Only execute once
timer.start(); // Go go go!

Этот код будет выполнен только один раз, и выполнение происходит за 3000 мс (3 секунды).

...