kafka Consumer Poll()在循环时内部使用时返回空集



我有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!

最新更新