`ExampleProducer` in eine Spring-Boot App umgebaut (ohne Spring Kafka) producer/spring-producer--generics--2025-03-18--19-42 producer/spring-producer--generics--generics4some producer/spring-producer--generics4some
authorKai Moritz <kai@juplo.de>
Mon, 28 Oct 2024 13:28:57 +0000 (14:28 +0100)
committerKai Moritz <kai@juplo.de>
Thu, 20 Feb 2025 18:43:46 +0000 (19:43 +0100)
commit672f0a4ab64d6c7293268e85be5a141e5a84ce55
treeda9d807479857c6740f41a81725ac88239450d14
parent3bd6c54ef093aafe63cc2666b32fe752f2290c8a
`ExampleProducer` in eine Spring-Boot App umgebaut (ohne Spring Kafka)

* Validierung der Properties aktiviert
* Steuerung und Abfrage über die Actuator-REST-API von ermöglicht
* Namespace für Konfig von `producer` in `juplo.producer` geändert
* In der Configuration wird das Interface des `KafkaProducer` übergeben
* Producerspezifische Properties werden in eigener nested Class verwaltet
** Dadurch wird der Code übersichtlicher, wenn spätere Implementierungen
   _sowohl_ als Consumer, _als auch_ als Producer agieren!
* Das Throttling kann über `juplo.producer.throttle-ms` gesteuert werden
* `delivery.timeout.ms` und `request.timeout.ms` noch weiter gesenkt
* `max.block.ms` auf 5s gesetzt
** Sonst entsteht bei verschiedenen Fehlern schnell ein falscher Eindruck
** Man könnte sonst auf die Idee kommen, dass der Producer für diese
   beliebig lange wartet!
* Eine Exception im Producer löst das Beenden der App aus
* Fix: `close()` muss noch vom `ExampleProducer` aufgerufen werden
** 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.
* `delivery.timeout.ms` konfigurierbar gemacht
* `max.block.ms` konfigurierbar gemacht
* `buffer.memory` konfigurierbar gemacht
15 files changed:
.dockerignore
.maven-dockerinclude
Dockerfile
README.sh
build.gradle
docker/docker-compose.yml
pom.xml
settings.gradle
src/main/java/de/juplo/kafka/Application.java [new file with mode: 0644]
src/main/java/de/juplo/kafka/ApplicationConfiguration.java [new file with mode: 0644]
src/main/java/de/juplo/kafka/ApplicationProperties.java [new file with mode: 0644]
src/main/java/de/juplo/kafka/ExampleProducer.java
src/main/resources/application.yml [new file with mode: 0644]
src/main/resources/logback.xml
src/test/java/de/juplo/kafka/ApplicationTests.java [new file with mode: 0644]