2016-02-22 4 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

Спасибо Nautilus, пожалуйста, вы можете объяснить использование этого addShutdownHook? Когда он будет запущен и как он срабатывает? –

+0

Punter Vicky, прочитайте это https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread). Я думаю, что это будет намного понятнее, чем любой объяснение, которое я могу дать в комментарии здесь. Также еще один вариант создания крюка выключения - аннотировать shutdown() с помощью @PreDestroy (http://docs.oracle.com/javaee/7/api/javax/annotation/PreDestroy.html) – Nautilus

+0

Спасибо Nautilus! –

Смежные вопросы