Reliable delivery
At-least-once delivery with configurable retries and fallback handling. Consumers should be idempotent.
Persist outgoing work with your business data, then process it asynchronously with ordering, retries, horizontal scaling, and observability.
// Native Namastack Outbox setup
dependencies {
implementation(platform("io.namastack:namastack-outbox-bom:1.10.x"))
implementation("io.namastack:namastack-outbox-starter-jpa")
}Meet Namastack Outbox and see how reliable event delivery fits into Spring Boot.
A database update and a broker publish cannot share one local transaction. Namastack stores the outgoing record beside the business change and processes it after commit.
Schedule atomically. Save the outbox record in the business transaction.
Process asynchronously. Partition-aware workers claim committed work.
Recover explicitly. Retries and fallback handlers deal with delivery failures.
Business data and the outbox record are persisted in one local transaction.
@TransactionalThe committed outbox record becomes durable work ready for processing.
Durable stateWorkers poll committed records and coordinate across application instances.
Partition awareThe matching handler runs while records with the same key stay ordered.
Per-key orderingSuccess completes the record; failures follow the configured retry strategy.
At least once// Business state and outgoing work commit together
@Transactional
fun createOrder(command: CreateOrderCommand) {
val order = orderRepository.save(Order.create(command))
outbox.schedule(
payload = OrderCreatedEvent(order.id, order.customerId),
key = "order-${order.id}"
)
}Choose the modules your application needs and keep the processing model inside Spring Boot.
At-least-once delivery with configurable retries and fallback handling. Consumers should be idempotent.
Records that share a key retain their processing order across polling cycles.
Partition-aware processing coordinates work safely across multiple application instances.
Choose JPA, JDBC, or MongoDB to fit the persistence model already used by the application.
Publish through Kafka, RabbitMQ, and Amazon SNS integrations, or implement a custom handler.
Micrometer metrics, distributed tracing, and context propagation cover the asynchronous boundary.
At-least-once delivery can produce duplicates. The guarantees guide explains ordering, retries, transactions, and consumer responsibilities.
Namastack Outbox is an independent library. Spring Modulith applications can use the official starter to externalize events through Namastack's persistence, processing, retry, ordering, and observability model.
Read the integration guidespring-modulith-starter-namastackNamastack OutboxJPA · JDBC · MongoDBInstall a persistence starter, schedule your first record, and follow the operational model in the documentation.
Namastack Outbox is independently developed and maintained as open-source software. Sponsorship supports maintenance, documentation, integrations, and long-term stability.