SNS & Outbox Pattern
// This is not atomic db.save(order); sns.publish(orderCreatedEvent); // What if this fails?// Using outbox with SNS @Transactional public void createOrder(Order order) { orderRepository.save(order); outboxRepository.save(new OutboxEvent("OrderCreated", order)); } // Separate process/lambda that polls outbox public void processOutbox() { List<OutboxEvent> events = outboxRepository.findUnprocessed(); for (OutboxEvent event : events) { sns.publish(event.getTopic(), event.getPayload()); outboxRepository.markAsProcessed(event.getId()); } }
Last updated