A sample application demonstrating Quarkus features and best practices. Superheroes fight against supervillains across multiple microservices communicating via REST, gRPC, and Kafka.

Architecture

The application consists of several microservices, communicating either synchronously via REST or asynchronously using Kafka. The base JVM version for all the applications is Java 25.

Superheroes architecture diagram

Services

Service Port Type Database Language
Hero REST API 8083 REST (reactive) PostgreSQL Java
Villain REST API 8084 REST (blocking) PostgreSQL Java
Fight REST API 8082 REST (reactive) MongoDB Java
Narration REST API 8087 REST (blocking) — (OpenAI) Java
Location gRPC API 8089 gRPC (blocking) MariaDB Kotlin
Event Statistics 8085 Kafka consumer + WebSocket Java
Battle UI 8080 React (via Quinoa) TypeScript

Demo

Communication Flow

  • UI → rest-fights (REST)
  • rest-fights → rest-heroes, rest-villains, rest-narration (REST via SmallRye Stork)
  • rest-fights → grpc-locations (gRPC)
  • rest-fights → Kafka (Avro messages via Apicurio Registry)
  • event-statistics ← Kafka consumer

Observability

All services export traces, metrics, and logs via OpenTelemetry (OTLP) to the Grafana LGTM stack (Loki, Grafana, Tempo, Prometheus).

Getting Started