This directory contains a set of demo around reactive in Quarkus with Kafka. It demonstrates the elasticity and resilience of the system.
mvn clean package
Run Kafka with:
docker-compose up
Then, create the orders
topic with ./create-orders.sh
You need to run:
- the coffee shop service
- the HTTP barista
- the Kafka barista
Im 3 terminals:
cd coffeeshop-service
mvn compile quarkus:dev
cd barista-http
mvn compile quarkus:dev
cd barista-kafka
mvn compile quarkus:dev
The first part of the demo shows HTTP interactions:
- Barista code:
me.escoffier.quarkus.coffeeshop.BaristaResource
- CoffeeShop code:
me.escoffier.quarkus.coffeeshop.CoffeeShopResource.http
- Generated client:
me.escoffier.quarkus.coffeeshop.http.BaristaService
Important points:
- Request-reply
Order coffees with:
http POST :8080/http product=latte name=clement
http POST :8080/http product=expresso name=neo
http POST :8080/http product=mocha name=flore
Stop the HTTP Barista, you can't order coffee anymore.
-
Barista code:
me.escoffier.quarkus.coffeeshop.KafkaBarista
: Read fromorders
, write toqueue
-
Bridge in the CoffeeShop:
me.escoffier.quarkus.coffeeshop.messaging.KafkaBaristas
just enqueue the orders in a single thread (one counter) -
Get prepared beverages on
me.escoffier.quarkus.coffeeshop.dashboard.BoardResource
and send to SSE -
Open browser to http://localhost:8080/queue
-
Order coffee with:
http POST :8080/messaging product=latte name=clement
http POST :8080/messaging product=expresso name=neo
http POST :8080/messaging product=mocha name=flore
- Stop the Kafka barista
- Continue to enqueue order
http POST :8080/messaging product=frappuccino name=clement
http POST :8080/messaging product=chai name=neo
http POST :8080/messaging product=hot-chocolate name=flore
- On the dashboard, the orders are in the "IN QUEUE" state
- Restart the barista
- They are processed
- Start a second barista with:
java -Dquarkus.http.port=9095 -Dbarista.name=tom -jar target/barista-kafka-1.0-SNAPSHOT-runner.jar
- Order more coffee
http POST :8080/messaging product=frappuccino name=clement
http POST :8080/messaging product=chai name=neo
http POST :8080/messaging product=hot-chocolate name=flore
http POST :8080/messaging product=latte name=clement
http POST :8080/messaging product=expresso name=neo
http POST :8080/messaging product=mocha name=flore
The dashboard shows that the load is dispatched among the baristas.