# confluentinc/qcon-microservices architecture

> Architecture diagram of the GitHub repository confluentinc/qcon-microservices, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/confluentinc/qcon-microservices
- Repository: https://github.com/confluentinc/qcon-microservices

## Overview

This is a QCon workshop example of Kafka-based order microservices. The main workflow accepts an order over HTTP, writes it to Kafka, validates it, and exposes order status through a materialized view; a separate stream-table join sends email. The README also describes customer/order event generators. Some implementation relationships are supported only by README descriptions or the SOURCE INDEX, so unsampled details are not expanded into extra call edges.

Main entry points: [`src/main/java/io/confluent/qcon/orders/OrderService.java`](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/OrderService.java) (Order Service), [`src/main/java/io/confluent/qcon/orders/EmailService.java`](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/EmailService.java) (Email Service), [`src/main/java/io/confluent/qcon/orders/OrderDetailsService.java`](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/OrderDetailsService.java) (Order Validator), [`src/main/java/io/confluent/qcon/orders/domain`](https://github.com/confluentinc/qcon-microservices/tree/master/src/main/java/io/confluent/qcon/orders/domain) (Order Models)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_order_api["Order API"]
  node_order_service["Order Service<br/>[OrderService.java]"]
  node_order_view[("Order View<br/>[OrderService.java]")]
end

subgraph group_event_processing["Event Processing"]
  node_order_validator["Order Validator"]
  node_order_events["Order Events<br/>[Schemas.java]"]
  node_order_generator["Order Generator<br/>[ProduceOrders.java]"]
end

subgraph group_email_workflow["Email Workflow"]
  node_email_service["Email Service<br/>[EmailService.java]"]
  node_email_delivery["Email Delivery<br/>[EmailService.java]"]
  node_customer_events["Customer Events<br/>[Schemas.java]"]
  node_customer_generator["Customer Generator"]
end

subgraph group_shared_runtime["Shared Runtime"]
  node_domain_models["Order Models"]
  node_serialization["JSON Serde"]
  node_config["Kafka Config<br/>[LoadConfigs.java]"]
  node_service_lifecycle["Service Lifecycle"]
end

node_shopper(("Order Client"))
node_kafka["Kafka Cluster"]

node_shopper -->|"submits and queries"| node_order_service
node_order_service -->|"publishes orders"| node_kafka
node_order_service -->|"queries status"| node_order_view
node_kafka -->|"updates view"| node_order_view
node_order_validator -->|"consumes and republishes"| node_kafka
node_order_generator -->|"produces orders"| node_kafka
node_email_service -->|"reads event topics"| node_kafka
node_email_service -->|"sends enriched email"| node_email_delivery
node_customer_generator -->|"produces customers"| node_kafka
node_order_events -->|"uses JSON serde"| node_serialization
node_customer_events -->|"uses JSON serde"| node_serialization
node_order_service -->|"loads configuration"| node_config
node_order_validator -->|"loads configuration"| node_config
node_email_service -->|"loads stream configuration"| node_config
node_order_service -->|"uses order model"| node_domain_models
node_order_validator -->|"validates order model"| node_domain_models
node_email_service -->|"joins orders and customers"| node_domain_models
node_order_service -->|"registers shutdown"| node_service_lifecycle
node_order_validator -->|"registers shutdown"| node_service_lifecycle
node_email_service -->|"registers shutdown"| node_service_lifecycle

click node_order_service "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/OrderService.java"
click node_order_view "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/OrderService.java"
click node_order_validator "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/OrderDetailsService.java"
click node_order_events "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/domain/Schemas.java"
click node_email_service "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/EmailService.java"
click node_email_delivery "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/EmailService.java"
click node_customer_events "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/domain/Schemas.java"
click node_order_generator "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/utils/ProduceOrders.java"
click node_customer_generator "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/utils/ProduceCustomers.java"
click node_domain_models "https://github.com/confluentinc/qcon-microservices/tree/master/src/main/java/io/confluent/qcon/orders/domain"
click node_serialization "https://github.com/confluentinc/qcon-microservices/tree/master/src/main/java/io/confluent/qcon/orders/serde"
click node_config "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/utils/LoadConfigs.java"
click node_service_lifecycle "https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/utils/MicroserviceShutdown.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_order_service,node_order_view,node_shopper toneBlue
class node_order_validator,node_order_events,node_order_generator toneAmber
class node_email_service,node_email_delivery,node_customer_events,node_customer_generator toneMint
class node_domain_models,node_serialization,node_config,node_service_lifecycle toneRose
class node_kafka toneIndigo
```

## Components

### Order API

- [Order Service](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/OrderService.java): `src/main/java/io/confluent/qcon/orders/OrderService.java`
- [Order View](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/OrderService.java): `src/main/java/io/confluent/qcon/orders/OrderService.java`

### Event Processing

- [Order Validator](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/OrderDetailsService.java): `src/main/java/io/confluent/qcon/orders/OrderDetailsService.java`
- [Order Events](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/domain/Schemas.java): `src/main/java/io/confluent/qcon/orders/domain/Schemas.java`
- [Order Generator](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/utils/ProduceOrders.java): `src/main/java/io/confluent/qcon/orders/utils/ProduceOrders.java`

### Email Workflow

- [Email Service](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/EmailService.java): `src/main/java/io/confluent/qcon/orders/EmailService.java`
- [Email Delivery](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/EmailService.java): `src/main/java/io/confluent/qcon/orders/EmailService.java`
- [Customer Events](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/domain/Schemas.java): `src/main/java/io/confluent/qcon/orders/domain/Schemas.java`
- [Customer Generator](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/utils/ProduceCustomers.java): `src/main/java/io/confluent/qcon/orders/utils/ProduceCustomers.java`

### Shared Runtime

- [Order Models](https://github.com/confluentinc/qcon-microservices/tree/master/src/main/java/io/confluent/qcon/orders/domain): `src/main/java/io/confluent/qcon/orders/domain`
- [JSON Serde](https://github.com/confluentinc/qcon-microservices/tree/master/src/main/java/io/confluent/qcon/orders/serde): `src/main/java/io/confluent/qcon/orders/serde`
- [Kafka Config](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/utils/LoadConfigs.java): `src/main/java/io/confluent/qcon/orders/utils/LoadConfigs.java`
- [Service Lifecycle](https://github.com/confluentinc/qcon-microservices/blob/master/src/main/java/io/confluent/qcon/orders/utils/MicroserviceShutdown.java): `src/main/java/io/confluent/qcon/orders/utils/MicroserviceShutdown.java`

### Other components

- **Order Client**
- **Kafka Cluster**

## Connections

- Order Client → Order Service: submits and queries (evidence: `src/main/java/io/confluent/qcon/orders/OrderService.java`)
- Order Service → Kafka Cluster: publishes orders (evidence: `src/main/java/io/confluent/qcon/orders/OrderService.java`)
- Order Service → Order View: queries status (evidence: `src/main/java/io/confluent/qcon/orders/OrderService.java`)
- Kafka Cluster → Order View: updates view (evidence: `src/main/java/io/confluent/qcon/orders/OrderService.java`)
- Order Validator → Kafka Cluster: consumes and republishes (evidence: `src/main/java/io/confluent/qcon/orders/OrderDetailsService.java`)
- Order Generator → Kafka Cluster: produces orders (evidence: `src/main/java/io/confluent/qcon/orders/utils/ProduceOrders.java`)
- Email Service → Kafka Cluster: reads event topics (evidence: `src/main/java/io/confluent/qcon/orders/EmailService.java`)
- Email Service → Email Delivery: sends enriched email (evidence: `src/main/java/io/confluent/qcon/orders/EmailService.java`)
- Customer Generator → Kafka Cluster: produces customers (evidence: `README.md`)
- Order Events → JSON Serde: uses JSON serde (evidence: `src/main/java/io/confluent/qcon/orders/domain/Schemas.java`)
- Customer Events → JSON Serde: uses JSON serde (evidence: `src/main/java/io/confluent/qcon/orders/domain/Schemas.java`)
- Order Service → Kafka Config: loads configuration (evidence: `src/main/java/io/confluent/qcon/orders/OrderService.java`)
- Order Validator → Kafka Config: loads configuration (evidence: `src/main/java/io/confluent/qcon/orders/OrderDetailsService.java`)
- Email Service → Kafka Config: loads stream configuration (evidence: `src/main/java/io/confluent/qcon/orders/EmailService.java`)
- Order Service → Order Models: uses order model (evidence: `src/main/java/io/confluent/qcon/orders/OrderService.java`)
- Order Validator → Order Models: validates order model (evidence: `src/main/java/io/confluent/qcon/orders/OrderDetailsService.java`)
- Email Service → Order Models: joins orders and customers (evidence: `src/main/java/io/confluent/qcon/orders/EmailService.java`)
- Order Service → Service Lifecycle: registers shutdown (evidence: `src/main/java/io/confluent/qcon/orders/OrderService.java`)
- Order Validator → Service Lifecycle: registers shutdown (evidence: `src/main/java/io/confluent/qcon/orders/OrderDetailsService.java`)
- Email Service → Service Lifecycle: registers shutdown (evidence: `src/main/java/io/confluent/qcon/orders/EmailService.java`)
