A prototype to demo integrating Quarkus with Kafka and Server-Sent Events (SSE).
This repo contain two services:
consumer-service
, that exposes a/consume/<topic>
: a service that listens to a kafka topic and sends the messages to a SSE endpoint.producer-service
, that exposes a/produce/<topic>
: a service that publishes messages to a kafka topic.
Both services expose metrics via Prometheus, and log in ECS format.
This project uses Quarkus, the Supersonic Subatomic Java Framework.
If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ .
Start a Kafka cluster using docker-compose:
docker-compose up -d
This will spin up a Confluent Kafka cluster with a single broker, a single zookeeper, and a single schema-registry. See https://docs.confluent.io/platform/current/platform-quickstart.html for more details.
Start consumer-service
with:
./gradlew :consumer-service:quarkusRun
Start producer-service
with:
./gradlew :producer-service:quarkusRun
In another terminal, start listening on the test
topic:
curl http://0.0.0.0:8880/consume/test
Produce messages into the test
topic:
curl -X POST -H "Content-Type: application/json" -d '{"message": "Hello, World!"}' http://localhost:8881/produce/test
curl -X POST -H "Content-Type: application/json" -d '{"message": "Goodbye, World!"}' http://localhost:8881/produce/test
You can run your application in dev mode that enables live coding using:
./gradlew :<service>:quarkusDev
NOTE: Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/.
The application can be packaged using:
./gradlew :<service>:build
It produces the quarkus-run.jar
file in the build/quarkus-app/
directory.
Be aware that it’s not an über-jar as the dependencies are copied into the build/quarkus-app/lib/
directory.
The application is now runnable using java -jar build/quarkus-app/quarkus-run.jar
.
If you want to build an über-jar, execute the following command:
./gradlew :<service>:build -Dquarkus.package.type=uber-jar
The application, packaged as an über-jar, is now runnable using java -jar build/*-runner.jar
.
You can create a native executable using:
./gradlew :<service>:build -Dquarkus.package.type=native
Or, if you don't have GraalVM installed, you can run the native executable build in a container using:
./gradlew :<service>:build -Dquarkus.package.type=native -Dquarkus.native.container-build=true
You can then execute your native executable with: ./build/message-service-1.0.0-SNAPSHOT-runner
If you want to learn more about building native executables, please consult https://quarkus.io/guides/gradle-tooling.