# Splitter

> One message with many items — break it apart so each item can be processed independently.

- **Category**: Integration
- **Subcategory**: Message Routing
- **Canonical URL**: https://designpattern.fyi/patterns/splitter/

---

## Description
Clean, reusable architecture pattern.


## Use Cases
Bulk invoice import — a BatchInvoiceMessage contains 200 invoices. Splitter emits 200 individual InvoiceMessage events. 10 parallel invoice-processor instances consume them concurrently. Throughput is 10x vs sequential. Aggregator collects all results for a final status report.





## Trade-offs


### Advantages

- Enables parallelism — N items processed concurrently

- Simplifies per-item processor logic — each processor handles one clean unit

- Naturally scales with competing consumers

- Decouples batch ingestion from per-item processing




### Considerations & Drawbacks

- Must maintain correlation between split messages for later aggregation

- Partial failures — if 3 of 200 fail, tracking and retrying only those 3 is complex

- Message volume multiplies — 1 batch message becomes N individual messages

- Split + Aggregate adds latency vs processing the batch in one shot







---
**Reference**: [Original Source](https://www.enterpriseintegrationpatterns.com/patterns/messaging/Splitter.html)

