Integration Patterns

📖 2 min read

Integration patterns define how different systems and services work together, enabling data flow and coordination between disparate components.

Each filter is independent and single-purpose.

Pipes and Filters

Pattern from Enterprise Integration Patterns by Gregor Hohpe and Bobby Woolf (2003), with roots in Unix philosophy

Processes data through a series of processing steps (filters) connected by channels (pipes), where each filter transforms the data and passes it to the next stage. Each filter is independent and single-purpose.

Use When:

  • Data needs to pass through multiple transformation steps
  • Want to reuse processing components (compositional design)
  • Need to enable parallel processing
  • Building ETL (Extract, Transform, Load) pipelines
  • Stream processing applications

Filter Types:

  • Producer: Generates data (e.g., file reader, API poller)
  • Transformer: Modifies data (e.g., format converter, enricher)
  • Tester: Filters/validates data (e.g., validator, filter)
  • Consumer: Terminal point (e.g., database writer, file writer)

Limitations

  • Not suitable for interactive applications requiring low latency
  • Cannot handle transactions across multiple filters
  • Debugging can be complex in long pipelines
  • No built-in error handling across pipeline

Example: Image processing pipeline where an uploaded image passes through filters for resizing, watermarking, format conversion, and thumbnail generation.

Upload (Producer) → Resize Filter (Transformer) → Watermark Filter (Transformer)
                 → Format Filter (Transformer) → Thumbnail Filter (Transformer)
                 → Store (Consumer)

Common implementations: Unix pipes, Apache Camel, Spring Integration, AWS Step Functions


Scatter-Gather

Sends a request to multiple services in parallel and aggregates their responses into a single result.

Use When:

  • Need to query multiple services for complete information
  • Can benefit from parallel processing
  • Partial results are acceptable if some services are unavailable

Key Considerations

  • Overall response time limited by the slowest service
  • Need to handle partial failures gracefully
  • May require result aggregation and deduplication

Example: Travel booking system that simultaneously queries multiple airlines, hotels, and car rental services to provide comprehensive search results.

Search Request → [Airline API, Hotel API, Car Rental API] → Aggregate Results → Response

Content-Based Router

Routes messages to different destinations based on message content rather than a predetermined path.

Use When:

  • Routing decisions depend on message content
  • Need flexible, rule-based message distribution
  • Different message types require different processing

Example: Order processing system that routes high-value orders to manual review, standard orders to automatic processing, and international orders to compliance checking.

Order → Content Router → {
  if order.value > 10000 → Manual Review Queue
  if order.country != "US" → Compliance Queue
  else → Standard Processing Queue
}

Message Translator

Transforms message format or content to enable communication between systems that use different data formats.

Use When:

  • Integrating legacy systems with modern applications
  • Systems use different data formats or protocols
  • Need to maintain backward compatibility

Example: Integrating a modern REST API with a legacy SOAP service by translating JSON requests to XML and XML responses back to JSON.

Client → JSON Request → Translator → XML Request → SOAP Service
SOAP Service → XML Response → Translator → JSON Response → Client

Quick Reference

Pattern Comparison

Pattern Purpose Complexity Use Case
Pipes and Filters Sequential transformation Low ETL, data processing
Scatter-Gather Parallel aggregation Medium Multi-source queries
Content-Based Router Conditional routing Low Message distribution
Message Translator Format conversion Low System integration

Decision Tree

Sequential transformations? → Pipes and Filters Query multiple sources in parallel? → Scatter-Gather Route based on content? → Content-Based Router Different data formats? → Message Translator

Implementation Tools

Pipes and Filters: Apache Camel Spring Integration Custom pipelines
Scatter-Gather: API Gateway Custom aggregator  
Content-Based Router: Apache Camel Spring Integration Message brokers
Message Translator: Apache Camel Spring Integration Custom transformers

Found this guide helpful? Share it with your team:

Share on LinkedIn