Skip to content
parvezive
Subscribe

Practical notes on leadership and architecture, every other week.

Subscribe to the newsletter
All books

Book notes · Architecture

Enterprise Integration Patterns

by Gregor Hohpe & Bobby Woolf

The catalogue of messaging patterns for connecting systems, and still the shared vocabulary behind every integration framework and event-driven architecture.

Enterprise Integration Patterns is a catalogue of 65 patterns for connecting applications with asynchronous messaging. Published in 2003, it has outlived almost every technology it mentions, because it describes problems that never went away: how to move data between systems that were never designed to work together, reliably and without coupling them too tightly.

The building blocks

The book starts with a handful of core ideas and builds everything else on them:

  • Message channels that carry data between applications.
  • Messages with a header and a body, including commands, documents and events.
  • Pipes and filters for chaining processing steps.
  • Routers that decide where a message goes next.
  • Translators that convert between formats.
  • Endpoints that connect an application to the messaging system.

From there come the patterns most of us use without naming: the content-based router, the splitter and aggregator, the dead letter channel, the idempotent receiver, publish-subscribe, request-reply and the message translator.

Why it still matters

Apache Camel, Spring Integration and many cloud integration services are built directly on this catalogue, often using the same names and icons. Event-driven microservices, Kafka pipelines and message brokers all face the problems the book describes. When a team says "we need an aggregator here" or "this should go to a dead letter queue", they're speaking its language.

Asynchronous messaging is fundamentally a pragmatic reaction to the problems of distributed systems.

How to read it

Don't read it cover to cover. Read the first few chapters on messaging fundamentals, then use the rest as a reference when you meet a specific problem.

Key ideas

  1. Messaging decouples systems.

    Asynchronous messages let systems evolve and fail independently, at the cost of more complexity.

  2. Name the patterns.

    A shared vocabulary such as router, splitter and aggregator makes integration designs far easier to discuss and review.

  3. Plan for failure.

    Dead letter channels, retries and idempotent receivers are part of the design, not an afterthought.

  4. Translate at the edges.

    Canonical data models and message translators keep each system's format from leaking into every other.

  5. Frameworks implement the book.

    Apache Camel and Spring Integration map almost one to one onto these patterns.

My take

Twenty years old, and still the integration book I reach for first.

I've built integrations across trading, healthcare and telecom systems, and the problems were always the ones in this book. Whether the transport was JMS, SOAP gateways, Kafka or a cloud service bus, the patterns didn't change.

It's the book I'd give any engineer moving into architecture, mostly for the vocabulary. Once a team shares these names, integration designs get simpler and reviews get much faster.

Who should read it

  • Architects and senior engineers designing system integrations.
  • Teams building event-driven or message-based microservices.
  • Developers working with Apache Camel, Spring Integration or Kafka.

Get the next essay in your inbox

Practical notes on engineering leadership and architecture, written for people doing the work. Free, every other week.