2016-02-22 273 views
1

我读了卡夫卡的高层次消费的细节在此link,看到下面的语句 -关闭卡夫卡消费者

在实践中,更常见的模式是使用睡眠无限期 使用关闭挂钩触发清洁关机。

是否有任何这样做的例子或指针可以帮助?

回答

2

这将是一个无限循环

public void run() { 
    try { 
     consumer.subscribe(topics); 
     while (true) { 
      ConsumerRecords<String, String> records = consumer.poll(Long.MAX_VALUE); 
     //do something 
     } 
    } catch (WakeupException e) { 
     // do nothing we are shutting down 
    } finally { 
     consumer.close(); 
    } 
    } 

    public void shutdown() { 
    consumer.wakeup(); 
    } 
} 

的例子,这将是你关闭挂钩。

@PostConstruct 
    private void init(){ 
     addShutdownHook(); 
    } 

private void addShutdownHook(){ 
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 

      @Override 
      public void run() { 
       shutdown(); 
      } 
     })); 
    } 
+0

谢谢鹦鹉螺,请你解释一下这个addShutdownHook的用法吗?它何时会被触发以及如何触发? –

+0

Punter Vicky,阅读此https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread)我认为这将比任何我可以在这里发表评论的解释。创建关闭钩子的另一个选择是使用@PreDestroy(http://docs.oracle.com/javaee/7/api/javax/annotation/PreDestroy.html) – Nautilus

+0

注释shutdown(),感谢Nautilus! –