A-short-name / Public-Transportation-Manager

Web Applications II project
0 stars 0 forks source link

Configure kafka #18

Closed lelexdrugo closed 2 years ago

lelexdrugo commented 2 years ago

A message broker must be used to allow communication between TicketCatalogService and PaymentService. Kafka is the selected one. From lab track:

...it transmits the billing information and the total cost of the order to the payment service through a kafka topic, and it returns the orderId. When the Kafka listener receives the outcome of the transaction, the status of order is updated according to what the payment service has stated and, if the operation was successful, the purchased products are added to the list of acquired tickets in the TravellerService.

...when receives a payment request in a kafka topic, sends back in another topic the outcome. It saves in a database the transactionID

Resource suggested to use: https://dev.to/magnuspedro/setting-up-spring-kafka-with-kotlin-53ea

lelexdrugo commented 2 years ago

Ricordarsi di eseguire il file docker-compose (anche da intellij stesso, tramite il tasto play che compare di fianco). Questo scaricherà le due immagini (kafka e zookeper) e creerà il container correttamente. Solo dopo che il container sarà avviato i servizi potranno avviarsi contattando il server Kafka

lelexdrugo commented 2 years ago

https://stackoverflow.com/questions/27952472/serialize-deserialize-java-8-java-time-with-jackson-json-mapper

è necessario aggiungere un'altra dipendenza per poter correttamente serializzare/deserializzare (e quindi costruire il messaggio a partire dal kpo) oggetti contenenti date (come nel nostro caso)

lelexdrugo commented 2 years ago

Stando a quanto dicono altre guide (https://www.confluent.io/blog/apache-kafka-spring-boot-application/) si può evitare un po' di codice se si sceglie di usare soltanto le application.properties e non una classe di configurazione annotata con @Configuration

lelexdrugo commented 2 years ago

C'è un problema se si usa il codice della guida. In pratica viene fatto un ack esplicito, e nella configurazione viene marcato come MANUAL-IMMEDIATE la tipologia di ack che si deve usare. Credo che stando a: https://github.com/spring-projects/spring-kafka/issues/1683 Non ci sia bisogno di marcare come MANUAL l'ack

https://stackoverflow.com/questions/60932007/what-is-the-difference-between-manual-and-manual-immediate-in-spring-kafka-ackmo

lelexdrugo commented 2 years ago

Attualmente (1269ffe2f83d587ab2cfb2e6b945df8ee0f008c8) catalog riesce a mandare message al payment. Bisogna aggiungere un altro topic con cui il payment si può comportare da produce e su cui il traveler possa ricevere le risposte