Fix: `close()` muss noch vom `ExampleProducer` aufgerufen werden
authorKai Moritz <kai@juplo.de>
Fri, 1 Nov 2024 14:12:00 +0000 (15:12 +0100)
committerKai Moritz <kai@juplo.de>
Fri, 8 Nov 2024 17:06:36 +0000 (18:06 +0100)
* Der Aufruf von `close()` löst das Versenden wartender Nachrichten aus.
* Wenn die Methode erst von Spring aufgerufen wird, werden ggf. noch
  Nachrichten konsumiert, nachdem der `ExampleProducer` bereits
  ausgegeben hat, wieviele Nachrichten er insgesamt verarbeitet hat.

src/main/java/de/juplo/kafka/ApplicationConfiguration.java
src/main/java/de/juplo/kafka/ExampleProducer.java

index 3d775f0..5a9bd82 100644 (file)
@@ -33,7 +33,7 @@ public class ApplicationConfiguration
             () -> applicationContext.close());
   }
 
-  @Bean
+  @Bean(destroyMethod = "")
   public KafkaProducer<String, String> kafkaProducer(ApplicationProperties properties)
   {
     Properties props = new Properties();
index 2190c8d..bc5cf89 100644 (file)
@@ -72,6 +72,8 @@ public class ExampleProducer implements Runnable
     }
     finally
     {
+      log.info("{}: Closing the KafkaProducer", id);
+      producer.close();
       log.info("{}: Produced {} messages in total, exiting!", id, produced);
     }
   }