# sartrebrasil/outbox-library architecture

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

- Interactive diagram: https://gitdiagram.com/sartrebrasil/outbox-library
- Repository: https://github.com/sartrebrasil/outbox-library

## Overview

This is a Java outbox-pattern library. The principal workflow writes a domain event into the application’s database transaction, then a polling relay publishes it to a configured broker with per-flow ordering, retries, and quarantine; operators can monitor and purge retained records. The README also documents Spring Boot integration and separate messaging-library and Kafka publisher modules. No source excerpts were available, so relationships below rely on the README; module internals and unshown calls are not inferred.

Main entry points: [`outbox-core/src/main/java/com/example/outbox/core/OutboxRelay.java`](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/OutboxRelay.java) (Polling relay), [`outbox-core/src/main/java/com/example/outbox/core/JdbcOutboxWriter.java`](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/JdbcOutboxWriter.java) (JDBC outbox writer), [`outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxAutoConfiguration.java`](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxAutoConfiguration.java) (Spring integration), [`outbox-core/src/main/java/com/example/outbox/core/MessagePublisher.java`](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/MessagePublisher.java) (Publisher interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_integration["Application integration"]
  node_spring["Spring integration"]
  node_springwriter["Spring writer"]
  node_properties["Outbox properties"]
  node_health["Health indicator"]
end

subgraph group_core["Outbox core"]
  node_writer["JDBC outbox writer"]
  node_message["Outbox message<br/>[OutboxMessage.java]"]
  node_schema[("Outbox schema")]
  node_relay["Polling relay<br/>[OutboxRelay.java]"]
  node_flow["Flow ordering<br/>[FluxoClaimer.java]"]
  node_failure["Retry and quarantine"]
  node_publisher["Publisher interface"]
end

subgraph group_publishers["Broker publishers"]
  node_messaging["Messaging publisher"]
  node_kafka["Kafka publisher"]
end

subgraph group_operations["Operations"]
  node_purge["Purge job<br/>[PurgeJob.java]"]
  node_metrics["Metrics collector"]
end

node_app(("Domain application"))
node_broker{{"Message broker"}}

node_app -->|"enqueues via"| node_springwriter
node_springwriter -->|"writes through"| node_writer
node_writer -->|"encodes"| node_message
node_writer -->|"writes records"| node_schema
node_app -->|"enqueues in transaction"| node_writer
node_relay -->|"polls records"| node_schema
node_relay -->|"orders by flow"| node_flow
node_relay -->|"retries and quarantines"| node_failure
node_relay -->|"publishes through"| node_publisher
node_publisher -->|"implemented by"| node_messaging
node_publisher -->|"implemented by"| node_kafka
node_messaging -->|"sends messages"| node_broker
node_kafka -->|"publishes messages"| node_broker
node_purge -->|"purges records"| node_schema
node_relay -->|"reports metrics"| node_metrics
node_purge -->|"reports metrics"| node_metrics
node_spring -->|"configures"| node_springwriter
node_spring -->|"uses configuration"| node_properties
node_spring -->|"provides health"| node_health

click node_spring "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxAutoConfiguration.java"
click node_springwriter "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/SpringOutboxWriter.java"
click node_properties "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxProperties.java"
click node_health "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxHealthIndicator.java"
click node_writer "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/JdbcOutboxWriter.java"
click node_message "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/OutboxMessage.java"
click node_schema "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/resources/db/outbox/postgresql/V202609211401__outbox_message.sql"
click node_relay "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/OutboxRelay.java"
click node_flow "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/FluxoClaimer.java"
click node_failure "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/FailureSuppressor.java"
click node_publisher "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/MessagePublisher.java"
click node_purge "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/PurgeJob.java"
click node_metrics "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/MetricsCollector.java"
click node_messaging "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-broker-messaging/src/main/java/com/example/outbox/broker/messaging/MessageSenderPublisher.java"
click node_kafka "https://github.com/sartrebrasil/outbox-library/blob/main/outbox-broker-kafka/src/main/java/com/example/outbox/broker/kafka/KafkaMessagePublisher.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_spring,node_springwriter,node_properties,node_health toneBlue
class node_writer,node_message,node_schema,node_relay,node_flow,node_failure,node_publisher toneAmber
class node_messaging,node_kafka toneMint
class node_purge,node_metrics toneRose
class node_app,node_broker toneIndigo
```

## Components

### Application integration

- [Spring integration](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxAutoConfiguration.java): `outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxAutoConfiguration.java`
- [Spring writer](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/SpringOutboxWriter.java): `outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/SpringOutboxWriter.java`
- [Outbox properties](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxProperties.java): `outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxProperties.java`
- [Health indicator](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxHealthIndicator.java): `outbox-spring-boot-starter/src/main/java/com/example/outbox/spring/OutboxHealthIndicator.java`

### Outbox core

- [JDBC outbox writer](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/JdbcOutboxWriter.java): `outbox-core/src/main/java/com/example/outbox/core/JdbcOutboxWriter.java`
- [Outbox message](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/OutboxMessage.java): `outbox-core/src/main/java/com/example/outbox/core/OutboxMessage.java`
- [Outbox schema](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/resources/db/outbox/postgresql/V202609211401__outbox_message.sql): `outbox-core/src/main/resources/db/outbox/postgresql/V202609211401__outbox_message.sql`
- [Polling relay](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/OutboxRelay.java): `outbox-core/src/main/java/com/example/outbox/core/OutboxRelay.java`
- [Flow ordering](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/FluxoClaimer.java): `outbox-core/src/main/java/com/example/outbox/core/FluxoClaimer.java`
- [Retry and quarantine](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/FailureSuppressor.java): `outbox-core/src/main/java/com/example/outbox/core/FailureSuppressor.java`
- [Publisher interface](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/MessagePublisher.java): `outbox-core/src/main/java/com/example/outbox/core/MessagePublisher.java`

### Broker publishers

- [Messaging publisher](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-broker-messaging/src/main/java/com/example/outbox/broker/messaging/MessageSenderPublisher.java): `outbox-broker-messaging/src/main/java/com/example/outbox/broker/messaging/MessageSenderPublisher.java`
- [Kafka publisher](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-broker-kafka/src/main/java/com/example/outbox/broker/kafka/KafkaMessagePublisher.java): `outbox-broker-kafka/src/main/java/com/example/outbox/broker/kafka/KafkaMessagePublisher.java`

### Operations

- [Purge job](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/PurgeJob.java): `outbox-core/src/main/java/com/example/outbox/core/PurgeJob.java`
- [Metrics collector](https://github.com/sartrebrasil/outbox-library/blob/main/outbox-core/src/main/java/com/example/outbox/core/MetricsCollector.java): `outbox-core/src/main/java/com/example/outbox/core/MetricsCollector.java`

### Other components

- **Domain application**
- **Message broker**

## Connections

- Domain application → Spring writer: enqueues via (evidence: `README.md`)
- Spring writer → JDBC outbox writer: writes through (evidence: `README.md`)
- JDBC outbox writer → Outbox message: encodes (evidence: `README.md`)
- JDBC outbox writer → Outbox schema: writes records (evidence: `README.md`)
- Domain application → JDBC outbox writer: enqueues in transaction (evidence: `README.md`)
- Polling relay → Outbox schema: polls records (evidence: `README.md`)
- Polling relay → Flow ordering: orders by flow (evidence: `README.md`)
- Polling relay → Retry and quarantine: retries and quarantines (evidence: `README.md`)
- Polling relay → Publisher interface: publishes through (evidence: `README.md`)
- Publisher interface → Messaging publisher: implemented by (evidence: `README.md`)
- Publisher interface → Kafka publisher: implemented by (evidence: `README.md`)
- Messaging publisher → Message broker: sends messages (evidence: `README.md`)
- Kafka publisher → Message broker: publishes messages (evidence: `README.md`)
- Purge job → Outbox schema: purges records (evidence: `README.md`)
- Polling relay → Metrics collector: reports metrics (evidence: `README.md`)
- Purge job → Metrics collector: reports metrics (evidence: `README.md`)
- Spring integration → Spring writer: configures (evidence: `README.md`)
- Spring integration → Outbox properties: uses configuration (evidence: `README.md`)
- Spring integration → Health indicator: provides health (evidence: `README.md`)
