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
Install test HTTP client:
brew install httpie
Run Kafka with:
docker-compose up
In case of previous run, you can clean the state with
docker-compose down
docker-compose rm
Then, create the orders
topic with ./create-topics-docker.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
java -Dbarista.name=tom -jar target/barista-http-1.0-SNAPSHOT-runner.jar
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
Order coffees with:
while [ true ]
do
http POST :8080/http product=latte name=clement
http POST :8080/http product=expresso name=neo
http POST :8080/http product=mocha name=flore
done
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.CoffeeShopResource#messaging
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/
-
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.