java - 收到Kafka消息后10分钟内安排 Activity

标签 java apache-kafka

我有一个 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/

相关文章:

java - 如何在新选项卡中显示打印的文档?

apache-kafka - 当目标系统关闭时,停止 Spring Cloud Stream @StreamListener 监听

c# - 如何从 Confluent kafka C# 库中的 Kafka 主题获取最新偏移量?

apache-kafka - Kafka 能保证零消息丢失吗?

java - Spring-Kafka : Issue while deserialising kafka message - class not in a "trusted package"?

java - JPA继承建模问题

java - MQJE001 : An MQException occurred: Completion Code 2, Reason 2009怎么解决

java - 将 javassist 字节码操作与 maven 编译集成

java - SWT 文本字段和按钮太小

logging - Kafka应用日志配置