# kemalq/springboot-rabbitmq-microservices architecture

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

- Interactive diagram: https://gitdiagram.com/kemalq/springboot-rabbitmq-microservices
- Repository: https://github.com/kemalq/springboot-rabbitmq-microservices

## Overview

This is a Spring Boot producer/consumer system demonstrating asynchronous RabbitMQ messaging. The main workflow is HTTP requests through exchange-specific producer controllers and a publisher into RabbitMQ, then listener-driven validation and handler dispatch on the consumer. The README documents confirms, returns, validation, and consumer routing; source excerpts were not provided, so links reflect documented architecture and the file tree without assuming additional wiring.

Main entry points: [`rabbitmq-producer/src/main/java/com/example/service/RabbitMessagePublisher.java`](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/service/RabbitMessagePublisher.java) (Message Publisher), [`rabbitmq-consumer/src/main/java/com/example/application/MessagingApplicationServiceImpl.java`](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/application/MessagingApplicationServiceImpl.java) (Processing Service), [`rabbitmq-producer/src/main/java/com/example/controller/DirectController.java`](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/controller/DirectController.java) (Direct API), [`rabbitmq-producer/src/main/java/com/example/controller/FanoutController.java`](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/controller/FanoutController.java) (Fanout API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_producer["Producer API"]
  node_direct["Direct API"]
  node_fanout["Fanout API"]
  node_topic["Topic API"]
  node_headers["Headers API"]
  node_publisher["Message Publisher"]
  node_payloads["Message DTOs"]
end

subgraph group_broker["Broker Routing"]
  node_topology["Exchange Setup"]
  node_initializer["Infrastructure Init"]
  node_rabbit["RabbitMQ Broker"]
end

subgraph group_consumer["Consumer Processing"]
  node_listener["Message Listener"]
  node_service["Processing Service"]
  node_validator["Message Validator"]
  node_notification_registry["Notification Registry"]
  node_notification_handlers["Channel Handlers"]
  node_user_registry["User Event Registry"]
  node_user_handlers["User Event Handlers"]
  node_consumer_dtos["Consumer DTOs"]
end

subgraph group_ops["Runtime Support"]
  node_monitoring["Health Monitoring"]
end

node_client(("HTTP Client"))

node_client -->|"HTTP request"| node_direct
node_client -->|"HTTP request"| node_fanout
node_client -->|"HTTP request"| node_topic
node_client -->|"HTTP request"| node_headers
node_direct -->|"publishes via"| node_publisher
node_fanout -->|"publishes via"| node_publisher
node_topic -->|"publishes via"| node_publisher
node_headers -->|"publishes via"| node_publisher
node_payloads -->|"validated payloads"| node_publisher
node_publisher -->|"publishes; confirms"| node_rabbit
node_publisher -->|"tracks unroutable returns"| node_rabbit
node_topology -->|"defines exchanges"| node_rabbit
node_initializer -->|"initializes topology"| node_rabbit
node_rabbit -->|"delivers messages"| node_listener
node_listener -->|"delegates processing"| node_service
node_service -->|"validates message"| node_validator
node_service -->|"routes notifications"| node_notification_registry
node_notification_registry -->|"selects channel"| node_notification_handlers
node_service -->|"routes user events"| node_user_registry
node_user_registry -->|"selects handler"| node_user_handlers
node_consumer_dtos -->|"message types"| node_service
node_monitoring -.->|"configures integration"| node_rabbit

click node_direct "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/controller/DirectController.java"
click node_fanout "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/controller/FanoutController.java"
click node_topic "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/controller/TopicController.java"
click node_headers "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/controller/HeadersController.java"
click node_publisher "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/service/RabbitMessagePublisher.java"
click node_payloads "https://github.com/kemalq/springboot-rabbitmq-microservices/tree/master/rabbitmq-producer/src/main/java/com/example/dto"
click node_topology "https://github.com/kemalq/springboot-rabbitmq-microservices/tree/master/rabbitmq-producer/src/main/java/com/example/configuration"
click node_initializer "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/configuration/RabbitInfrastructureInitializer.java"
click node_listener "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/listener/RabbitMessageListener.java"
click node_service "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/application/MessagingApplicationServiceImpl.java"
click node_validator "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/configuration/MessageValidator.java"
click node_notification_registry "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/handler/notification/NotificationHandlerRegistry.java"
click node_notification_handlers "https://github.com/kemalq/springboot-rabbitmq-microservices/tree/master/rabbitmq-consumer/src/main/java/com/example/handler/notification"
click node_user_registry "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/handler/userEvent/UserEventHandlerRegistry.java"
click node_user_handlers "https://github.com/kemalq/springboot-rabbitmq-microservices/tree/master/rabbitmq-consumer/src/main/java/com/example/handler/userEvent"
click node_consumer_dtos "https://github.com/kemalq/springboot-rabbitmq-microservices/tree/master/rabbitmq-consumer/src/main/java/com/example/dto"
click node_monitoring "https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/resources/application.properties"

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_direct,node_fanout,node_topic,node_headers,node_publisher,node_payloads,node_client toneBlue
class node_topology,node_initializer,node_rabbit toneAmber
class node_listener,node_service,node_validator,node_notification_registry,node_notification_handlers,node_user_registry,node_user_handlers,node_consumer_dtos toneMint
class node_monitoring toneRose
```

## Components

### Producer API

- [Direct API](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/controller/DirectController.java): `rabbitmq-producer/src/main/java/com/example/controller/DirectController.java`
- [Fanout API](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/controller/FanoutController.java): `rabbitmq-producer/src/main/java/com/example/controller/FanoutController.java`
- [Topic API](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/controller/TopicController.java): `rabbitmq-producer/src/main/java/com/example/controller/TopicController.java`
- [Headers API](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/controller/HeadersController.java): `rabbitmq-producer/src/main/java/com/example/controller/HeadersController.java`
- [Message Publisher](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/service/RabbitMessagePublisher.java): `rabbitmq-producer/src/main/java/com/example/service/RabbitMessagePublisher.java`
- [Message DTOs](https://github.com/kemalq/springboot-rabbitmq-microservices/tree/master/rabbitmq-producer/src/main/java/com/example/dto): `rabbitmq-producer/src/main/java/com/example/dto`

### Broker Routing

- [Exchange Setup](https://github.com/kemalq/springboot-rabbitmq-microservices/tree/master/rabbitmq-producer/src/main/java/com/example/configuration): `rabbitmq-producer/src/main/java/com/example/configuration`
- [Infrastructure Init](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-producer/src/main/java/com/example/configuration/RabbitInfrastructureInitializer.java): `rabbitmq-producer/src/main/java/com/example/configuration/RabbitInfrastructureInitializer.java`
- **RabbitMQ Broker**

### Consumer Processing

- [Message Listener](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/listener/RabbitMessageListener.java): `rabbitmq-consumer/src/main/java/com/example/listener/RabbitMessageListener.java`
- [Processing Service](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/application/MessagingApplicationServiceImpl.java): `rabbitmq-consumer/src/main/java/com/example/application/MessagingApplicationServiceImpl.java`
- [Message Validator](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/configuration/MessageValidator.java): `rabbitmq-consumer/src/main/java/com/example/configuration/MessageValidator.java`
- [Notification Registry](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/handler/notification/NotificationHandlerRegistry.java): `rabbitmq-consumer/src/main/java/com/example/handler/notification/NotificationHandlerRegistry.java`
- [Channel Handlers](https://github.com/kemalq/springboot-rabbitmq-microservices/tree/master/rabbitmq-consumer/src/main/java/com/example/handler/notification): `rabbitmq-consumer/src/main/java/com/example/handler/notification`
- [User Event Registry](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/java/com/example/handler/userEvent/UserEventHandlerRegistry.java): `rabbitmq-consumer/src/main/java/com/example/handler/userEvent/UserEventHandlerRegistry.java`
- [User Event Handlers](https://github.com/kemalq/springboot-rabbitmq-microservices/tree/master/rabbitmq-consumer/src/main/java/com/example/handler/userEvent): `rabbitmq-consumer/src/main/java/com/example/handler/userEvent`
- [Consumer DTOs](https://github.com/kemalq/springboot-rabbitmq-microservices/tree/master/rabbitmq-consumer/src/main/java/com/example/dto): `rabbitmq-consumer/src/main/java/com/example/dto`

### Runtime Support

- [Health Monitoring](https://github.com/kemalq/springboot-rabbitmq-microservices/blob/master/rabbitmq-consumer/src/main/resources/application.properties): `rabbitmq-consumer/src/main/resources/application.properties`

### Other components

- **HTTP Client**

## Connections

- HTTP Client → Direct API: HTTP request
- HTTP Client → Fanout API: HTTP request
- HTTP Client → Topic API: HTTP request
- HTTP Client → Headers API: HTTP request
- Direct API → Message Publisher: publishes via
- Fanout API → Message Publisher: publishes via
- Topic API → Message Publisher: publishes via
- Headers API → Message Publisher: publishes via
- Message DTOs → Message Publisher: validated payloads
- Message Publisher → RabbitMQ Broker: publishes; confirms
- Message Publisher → RabbitMQ Broker: tracks unroutable returns
- Exchange Setup → RabbitMQ Broker: defines exchanges
- Infrastructure Init → RabbitMQ Broker: initializes topology
- RabbitMQ Broker → Message Listener: delivers messages
- Message Listener → Processing Service: delegates processing
- Processing Service → Message Validator: validates message
- Processing Service → Notification Registry: routes notifications
- Notification Registry → Channel Handlers: selects channel
- Processing Service → User Event Registry: routes user events
- User Event Registry → User Event Handlers: selects handler
- Consumer DTOs → Processing Service: message types
- Health Monitoring → RabbitMQ Broker: configures integration
