{"repo":"gruelbox/transaction-outbox","free":true,"listed":false,"github":"https://github.com/gruelbox/transaction-outbox","clone":"git clone https://github.com/gruelbox/transaction-outbox.git","description":"Reliable eventual consistency for Microservices","language":"Java","stars":342,"topics":["microservices","microservices-architecture","transaction-manager","eventually-consistent","eventual-consistency","fifo-queue","kafka","kinesis","self-contained-system"],"license":"Apache-2.0","category":"data-pipelines","readme_excerpt":"transaction-outbox A flexible implementation of the Transaction Outbox Pattern for Java. TransactionOutbox has a clean, extensible API, very few dependencies and plays nicely with a variety of database platforms, transaction management approaches and application frameworks. Every aspect is highly configurable or overridable. It features out-of-the-box support for Spring DI , Spring Txn , Guice , MySQL 5 & 8 , PostgreSQL 11-16 , Oracle 18 & 21 , MS SQL Server 2017 and H2 . Contents 1. Why do I need it? 1. Installation 1. Requirements 1. Stable releases 1. Development snapshots 1. Basic Configuration 1. No existing transaction manager or dependency injection 1. Spring 1. Guice 1. jOOQ 1. Set up the background worker 1. Managing the \"dead letter queue\" 1. Advanced 1. Topics and FIFO ordering 1. The nested outbox pattern 1. Idempotency protection 1. Delayed/scheduled processing 1. Flexible serialization 1. Clustering 1. OpenTelemetry 1. Encryption 1. Configuration reference 1. Stubbing in tests Why do I need it? This article explains the concept in an abstract manner, but let's say we have a microservice that handles point-of-sale and need to implement a REST endpoint to record a sale. We end up with this: Attempt 1 The SaleRepository handles recording the sale in the customer's account, the StockReductionEvent goes off to our warehouse service, and the IncomeEvent goes to our financial records service (let's ignore the potential flaws in the domain modelling for now). There's a ","default_branch":null,"files":null,"tree":[],"storefront":"/r/gruelbox","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/gruelbox/transaction-outbox/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}