我有一个 Java 应用程序,它有一个 Kafka 消费者。它接收消息,将它们存储在数据库中,并通过 Rest API 将它们发送到另一个应用程序以执行。我想在收到每条消息后 10 分钟内安排一个事件来检查消息的状态,如果消息未得到处理,则必须将其丢弃。
实现这一点的最佳方法是什么?有任何库或框架吗?
最佳答案
您可以使用多种方法(cron 作业):
1) 使用此示例代码new java.util.Timer().schedule
( javadoc ):
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 表达式和调度 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 秒)。
关于java - 收到Kafka消息后10分钟内安排 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61633727/