# ceoalmaloco/ms-barriodigital-mq-admin architecture

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

- Interactive diagram: https://gitdiagram.com/ceoalmaloco/ms-barriodigital-mq-admin
- Repository: https://github.com/ceoalmaloco/ms-barriodigital-mq-admin

## Overview

mq-admin is a Spring service for administering RabbitMQ queues, exchanges, and bindings through an HTTP API called by the BFF. Requests pass through internal-token and Admin-role protection, then resource controllers and orchestration services validate existence/protection, mutate RabbitMQ over AMQP, and return views. Successful mutations enqueue audit events for Kafka. The excerpts show the resource orchestration and audit publisher; other route and filter details rely on README documentation and the source tree.

Main entry points: [`src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java`](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java) (Queue operations), [`src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java`](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java) (Exchange operations), [`src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java`](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java) (Binding operations), [`src/main/java/cl/duoc/barriodigital/mqadmin/web/AdminGateFilter.java`](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/AdminGateFilter.java) (Admin role gate)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_queue_api["Queue API"]
  node_exchange_api["Exchange API"]
  node_binding_api["Binding API"]
  node_api_errors["API errors"]
  node_resource_views["Resource views"]
end

subgraph group_admin["RabbitMQ Administration"]
  node_queue_ops["Queue operations"]
  node_exchange_ops["Exchange operations"]
  node_binding_ops["Binding operations"]
  node_amqp_admin["AMQP admin"]
  node_management_client["Management API client"]
  node_resource_models["Resource declarations"]
end

subgraph group_audit["Audit Events"]
  node_audit_factory["Audit event factory"]
  node_audit_publisher["Audit publisher"]
  node_kafka_sender["Kafka sender"]
end

subgraph group_security["Request Protection"]
  node_protection_config["Protected names"]
  node_token_filter["Internal token filter"]
  node_admin_gate["Admin role gate"]
  node_actor_filter["Actor context filter"]
end

node_bff(("BFF caller"))
node_rabbit_broker[("RabbitMQ broker")]
node_rabbit_management["RabbitMQ Management"]
node_kafka["Kafka audit.timeline"]

node_bff -->|"calls"| node_queue_api
node_bff -->|"calls"| node_exchange_api
node_bff -->|"calls"| node_binding_api
node_queue_api -->|"delegates to"| node_queue_ops
node_exchange_api -->|"delegates to"| node_exchange_ops
node_binding_api -->|"delegates to"| node_binding_ops
node_queue_ops -->|"mutates via"| node_amqp_admin
node_exchange_ops -->|"mutates via"| node_amqp_admin
node_binding_ops -->|"mutates via"| node_amqp_admin
node_queue_ops -->|"queries"| node_management_client
node_exchange_ops -->|"queries"| node_management_client
node_binding_ops -->|"checks endpoints"| node_management_client
node_amqp_admin -->|"declares and deletes"| node_rabbit_broker
node_management_client -->|"reads HTTP API"| node_rabbit_management
node_queue_ops -->|"checks names"| node_protection_config
node_exchange_ops -->|"checks names"| node_protection_config
node_binding_ops -->|"checks names"| node_protection_config
node_queue_ops -->|"uses declarations"| node_resource_models
node_exchange_ops -->|"uses declarations"| node_resource_models
node_binding_ops -->|"uses declarations"| node_resource_models
node_queue_ops -->|"builds views"| node_resource_views
node_exchange_ops -->|"builds views"| node_resource_views
node_binding_ops -->|"builds views"| node_resource_views
node_queue_ops -->|"creates events"| node_audit_factory
node_exchange_ops -->|"creates events"| node_audit_factory
node_binding_ops -->|"creates events"| node_audit_factory
node_audit_factory -->|"reads actor context"| node_actor_filter
node_queue_ops -->|"publishes events"| node_audit_publisher
node_exchange_ops -->|"publishes events"| node_audit_publisher
node_binding_ops -->|"publishes events"| node_audit_publisher
node_audit_publisher -->|"sends confirmed"| node_kafka_sender
node_kafka_sender -->|"publishes to"| node_kafka
node_bff -->|"supplies token"| node_token_filter
node_token_filter -->|"precedes role check"| node_admin_gate
node_admin_gate -.->|"guards"| node_queue_api
node_admin_gate -.->|"guards"| node_exchange_api
node_admin_gate -.->|"guards"| node_binding_api
node_api_errors -.->|"maps exceptions"| node_queue_api

click node_queue_api "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/QueueController.java"
click node_exchange_api "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/ExchangeController.java"
click node_binding_api "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/BindingController.java"
click node_api_errors "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/MqExceptionHandler.java"
click node_queue_ops "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java"
click node_exchange_ops "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java"
click node_binding_ops "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java"
click node_amqp_admin "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/RabbitAdminService.java"
click node_management_client "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/RabbitManagementClient.java"
click node_resource_models "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/tree/develop/src/main/java/cl/duoc/barriodigital/mqadmin/domain"
click node_resource_views "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/tree/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web"
click node_protection_config "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/config/MqProtectionProperties.java"
click node_token_filter "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/InternalTokenFilter.java"
click node_admin_gate "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/AdminGateFilter.java"
click node_actor_filter "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/ActorContextFilter.java"
click node_audit_factory "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/messaging/AuditEventFactory.java"
click node_audit_publisher "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/messaging/AuditPublisher.java"
click node_kafka_sender "https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/messaging/DefaultAuditKafkaSender.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_queue_api,node_exchange_api,node_binding_api,node_api_errors,node_resource_views toneBlue
class node_queue_ops,node_exchange_ops,node_binding_ops,node_amqp_admin,node_management_client,node_resource_models,node_rabbit_broker toneAmber
class node_audit_factory,node_audit_publisher,node_kafka_sender toneMint
class node_protection_config,node_token_filter,node_admin_gate,node_actor_filter toneRose
class node_bff,node_rabbit_management,node_kafka toneIndigo
```

## Components

### HTTP API

- [Queue API](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/QueueController.java): `src/main/java/cl/duoc/barriodigital/mqadmin/web/QueueController.java`
- [Exchange API](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/ExchangeController.java): `src/main/java/cl/duoc/barriodigital/mqadmin/web/ExchangeController.java`
- [Binding API](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/BindingController.java): `src/main/java/cl/duoc/barriodigital/mqadmin/web/BindingController.java`
- [API errors](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/MqExceptionHandler.java): `src/main/java/cl/duoc/barriodigital/mqadmin/web/MqExceptionHandler.java`
- [Resource views](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/tree/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web): `src/main/java/cl/duoc/barriodigital/mqadmin/web`

### RabbitMQ Administration

- [Queue operations](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java): `src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java`
- [Exchange operations](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java): `src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java`
- [Binding operations](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java): `src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java`
- [AMQP admin](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/RabbitAdminService.java): `src/main/java/cl/duoc/barriodigital/mqadmin/service/RabbitAdminService.java`
- [Management API client](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/service/RabbitManagementClient.java): `src/main/java/cl/duoc/barriodigital/mqadmin/service/RabbitManagementClient.java`
- [Resource declarations](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/tree/develop/src/main/java/cl/duoc/barriodigital/mqadmin/domain): `src/main/java/cl/duoc/barriodigital/mqadmin/domain`

### Audit Events

- [Audit event factory](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/messaging/AuditEventFactory.java): `src/main/java/cl/duoc/barriodigital/mqadmin/messaging/AuditEventFactory.java`
- [Audit publisher](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/messaging/AuditPublisher.java): `src/main/java/cl/duoc/barriodigital/mqadmin/messaging/AuditPublisher.java`
- [Kafka sender](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/messaging/DefaultAuditKafkaSender.java): `src/main/java/cl/duoc/barriodigital/mqadmin/messaging/DefaultAuditKafkaSender.java`

### Request Protection

- [Protected names](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/config/MqProtectionProperties.java): `src/main/java/cl/duoc/barriodigital/mqadmin/config/MqProtectionProperties.java`
- [Internal token filter](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/InternalTokenFilter.java): `src/main/java/cl/duoc/barriodigital/mqadmin/web/InternalTokenFilter.java`
- [Admin role gate](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/AdminGateFilter.java): `src/main/java/cl/duoc/barriodigital/mqadmin/web/AdminGateFilter.java`
- [Actor context filter](https://github.com/ceoalmaloco/ms-barriodigital-mq-admin/blob/develop/src/main/java/cl/duoc/barriodigital/mqadmin/web/ActorContextFilter.java): `src/main/java/cl/duoc/barriodigital/mqadmin/web/ActorContextFilter.java`

### Other components

- **BFF caller**
- **RabbitMQ broker**
- **RabbitMQ Management**
- **Kafka audit.timeline**

## Connections

- BFF caller → Queue API: calls (evidence: `README.md`)
- BFF caller → Exchange API: calls (evidence: `README.md`)
- BFF caller → Binding API: calls (evidence: `README.md`)
- Queue API → Queue operations: delegates to (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/web/QueueController.java`)
- Exchange API → Exchange operations: delegates to (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/web/ExchangeController.java`)
- Binding API → Binding operations: delegates to (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/web/BindingController.java`)
- Queue operations → AMQP admin: mutates via (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java`)
- Exchange operations → AMQP admin: mutates via (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java`)
- Binding operations → AMQP admin: mutates via (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java`)
- Queue operations → Management API client: queries (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java`)
- Exchange operations → Management API client: queries (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java`)
- Binding operations → Management API client: checks endpoints (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java`)
- AMQP admin → RabbitMQ broker: declares and deletes (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/RabbitAdminService.java`)
- Management API client → RabbitMQ Management: reads HTTP API (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/RabbitManagementClient.java`)
- Queue operations → Protected names: checks names (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java`)
- Exchange operations → Protected names: checks names (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java`)
- Binding operations → Protected names: checks names (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java`)
- Queue operations → Resource declarations: uses declarations (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java`)
- Exchange operations → Resource declarations: uses declarations (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java`)
- Binding operations → Resource declarations: uses declarations (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java`)
- Queue operations → Resource views: builds views (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java`)
- Exchange operations → Resource views: builds views (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java`)
- Binding operations → Resource views: builds views (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java`)
- Queue operations → Audit event factory: creates events (evidence: `README.md`)
- Exchange operations → Audit event factory: creates events (evidence: `README.md`)
- Binding operations → Audit event factory: creates events (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java`)
- Audit event factory → Actor context filter: reads actor context
- Queue operations → Audit publisher: publishes events (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/QueueHttpService.java`)
- Exchange operations → Audit publisher: publishes events (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/ExchangeHttpService.java`)
- Binding operations → Audit publisher: publishes events (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/service/BindingHttpService.java`)
- Audit publisher → Kafka sender: sends confirmed (evidence: `src/main/java/cl/duoc/barriodigital/mqadmin/messaging/AuditPublisher.java`)
- Kafka sender → Kafka audit.timeline: publishes to (evidence: `README.md`)
- BFF caller → Internal token filter: supplies token (evidence: `README.md`)
- Internal token filter → Admin role gate: precedes role check (evidence: `README.md`)
- Admin role gate → Queue API: guards
- Admin role gate → Exchange API: guards
- Admin role gate → Binding API: guards
- API errors → Queue API: maps exceptions
