我有Kafka消费者的基本实现。当它调用 poll()
方法时,我的工作正常(让我们调用此 v1 )。
但是,一旦我将 poll()
放置在 while
loop(让我们称此 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
}
}
}
更新:
我在这里注意到了一些东西。可能不是 poll()
方法引起了这一点。但是封闭 eventHandler 。请检查上面提供的代码以获取更新。
我注意到的是,直到控件退出此 mouseClicked()
方法,内部代码所做的更改在GUI中不可见。
所以,我的新问题:如何使Kafka消费者通过按钮单击事件启动的无限循环运行?
空的结果可能是由于短时间参数引起的,您可以尝试增加它。
超时 - 以毫秒为单位的时间在民意调查中花费了 缓冲区不可用。
我发现了(通过非常复杂的搜索),您的无法在事件侦听器内部有一个循环,原因是现在很明显。
话虽如此,我确实发现我可以使用扩展SwingWorker
类的类。
基本上,我所做的是从mouseClicked()
方法中删除所有代码,然后将其放入SwingWorker
类的doInBackground()
方法中。显然,这造成了很多错误。
要对这些错误进行故障排除,我需要将所需的所有信息从GUI组件传递给SwingWorker
类。我通过使用参数化的构造函数。
之后,我只是用适当的值实例化了SwingWorker
类并执行对象。 et voila!