2016-11-23 5 views
0

У меня есть базовая реализация потребителя Kafka. У меня он работает правильно, когда он вызывает метод при нажатии кнопки (назовем это V1).Kafka Consumer poll() возвращает пустой набор при использовании внутри цикла while

Но как только я помещаю метод poll() внутри while петли (давайте назовем это V2), прекратить получение сообщений.

Странная вещь, что V1 все еще в состоянии подобрать новые сообщения, но V2 все еще получает пустой ConsumerRecords объект.

Я убедился, что V1 и V2 находятся в разных ConsumerGroups.

Здесь V2 содержит код, показанный на рисунке ниже.

И V1 имеет петлю while удален. В противном случае нет другой отличие.

Может ли кто-нибудь сказать мне, что происходит и почему?

Код Воспроизводится ниже:

btnButton.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent arg0){ 
     while(true) { 
      ConsumerRecords<String, String> records = consumerGroupObj.consumerObj.poll(100); 

      // Trying to insert into DefaultTableModel here for an existing jTable 

      // Some other processing code 
     } 
    } 
} 

Update:

Я заметил, что-то здесь. Возможно, это не метод poll(). Но прилагается eventHandler. Проверьте обновления, указанные выше.

То, что я заметил, что, пока выходы управления этим mouseClicked() метод, изменения, внесенные в код внутри не видны в графическом интерфейсе.

Итак, мой новый вопрос: Как сделать потребительский прогон Kafka в бесконечном цикле, который запускается при нажатии кнопки?

ответ

0

я узнал (через очень запутанный поиск) что вы не можешь иметь цикла внутри прослушивателя событий, по причинам, которые, кажется, совершенно очевидны, в настоящее время.

Это, как говорится, я выяснил, что могу использовать класс, который расширяет класс SwingWorker.

Так что, в основном, я удалил весь код из метода mouseClicked() и поместил его в метод doInBackground() моего класса SwingWorker. Очевидно, это создало много ошибок.

Чтобы устранить эти ошибки, мне нужно было передать всю информацию, необходимую мне из компонентов графического интерфейса, в класс SwingWorker. Я сделал это, используя параметризованный конструктор .

После этого я просто создал класс SwingWorker с соответствующими значениями и выполнил объект. Et Voila!

0

Пустые результаты могут быть вызваны кратковременным параметром таймаута, вы можете попытаться увеличить его.

timeout - Время в миллисекундах, проведенное в опросе, если данные недоступны в буфере.

+0

Я добавил тайм-аут моего собственного вне таймаута, используемого в 'poll()'. Кроме того, увеличено и уменьшено время ожидания, используемое 'poll()', от 100 мс до 5000 мс. Нет эффекта. Я думаю, что это имеет какое-то отношение к потоку контроля через обработчик событий. – GaidinD

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

  • Нет связанных вопросов^_^