# Lab02 - Producer

# Rappel

lab02

# Digitransit

https://digitransit.fi/en/developers/apis/4-realtime-api/vehicle-positions/ (opens new window)

La plupart des véhicules situés en Finlande 🇫🇮 produisent des événements comprenant entre autres leurs statuts et leurs positions, une fois par seconde. Ce qui permet de facilement tracer leurs positions et de réaliser des exemples concrets dans un environment proche IOT.

digitransit

# Consommation de la file MQTT Digitransit vers Kafka

lab02.mqtt

# Un record

record

# Préparer le projet et le topic Kafka

  • ⚠️ Checkout de la branche step02 ⚠️.

  • Se placer dans le répertoire Lab02-producer.

  • Créer un topic vehicle-positions en CLI si celui-ci n'est pas déjà présent.

⚠️ Pensez à être présent dans le conteneur tools

kafka-topics --if-not-exists --bootstrap-server kafka:9092 --create --topic vehicle-positions --replication-factor 1 --partitions 1

# Un peu de code

# Utilisation de l'API Producer

  • Explorer le projet Spring Boot Lab02-producer

    • La configuration présente dans le fichier application.properties
    • L'auto-configuration de ProducerFactory<String, String> en lien avec les properties
    • Le client mqtt qui récupère les évènements de Digitransit (opens new window)

    En effet, Spring Boot fournit une configuration automatique pour Kafka via la classe KafkaAutoConfiguration (javadoc (opens new window)) . Lorsque vous utilisez @EnableAutoConfiguration ou @SpringBootApplication, Spring boot configure automatiquement Kafka pour vous.
    KafkaAutoConfiguration autoconfigure pour vous (serializer String par défaut) les beans suivants :

    • kafkaAdmin
    • kafkaJaasInitializer
    • kafkaTransactionManager
    • kafkaProducerFactory
    • kafkaConsumerFactory
    • kafkaProducerListener
    • kafkaTemplate
  • Compléter la méthode Subscriber#messageArrived() afin de produire des évènements

  • Pour un Producer en mode Vanilla Java vous pouvez vous inspirer de ce tutorial rédigé par Confluent
    https://kafka-tutorials.confluent.io/creating-first-apache-kafka-producer-application/kafka.html (opens new window)

  • Verifier dans AKHQ que des messages sont produits http://akhq:8080/ui/server/topic/vehicle-positions (opens new window)

# Utilisation de l'API KafkaTemplate

  • Utilisation du profil spring kafka-template, plutôt que de s'appuyer sur le kafkaProducerFactory, on peut utiliser le bean kafkaTemplate

    • Le KafkaTemplate wrap un producer et fournit des méthodes pratiques pour produire des records sur les topics Kafka.
    • Consulter la Javadoc (opens new window) pour plus d'informations.
  • Compléter la méthode SubscriberWithTemplate#messageArrived() afin de produire des évènements

  • Vous pouvez vous inspirer de ce tutorial de Baeldung: https://www.baeldung.com/spring-kafka (opens new window)

# Démarrer votre application en local

  • Il s'agit d'un projet Maven qui dispose d'un wrapper mvnw et du plugin spring-boot-maven-plugin, vous pouvez démarrer votre application spring en local à l'aide de la commande suivante :

Se placer dans le bon répertoire Lab02-producer

./mvnw spring-boot:run

# Packager votre application avec Docker

  • Pour builder et démarrer le conteneur

Se placer dans le bon répertoire Lab02-producer

docker build -t vp-producer .
docker run --name vp-producer --network=tz-kafka-network -d vp-producer
  • Pour démarrer votre conteneur avec le profil kafka-template
docker run --name vp-producer --network=tz-kafka-network -e "SPRING_PROFILES_ACTIVE=kafka-template" -d vp-producer

Supprimer le conteneur si déjà présent

docker container stop vp-producer
docker container rm vp-producer

# Solution

Vous vous doutez que pour disposer des solutions de la step02, il vous suffit de️ checkout la branche step03 😊