February 5, 2017
Enterprise Integration Patterns are timeless. That our book keeps selling well two decades after its publication in 2003 underlines this fact. However, the code examples haven't aged quite as well. While for example the JMS API remained somewhat stable, the examples were built with JDK 1.4 without any modern constructs such as generics, streams, etc. The EAI tool landscape has also dramatically changed, with the advent of open source ESBs (which were fueled by the publication of EIP) and later IPaas and serverless solutions. It's hard to imagine that back in 2003 you had to get a server and manually install all software on it just to try a few simple concepts.
The Messaging Pattern catalog on this web site remained static, but the patterns could benefit from code examples that use modern tech like GoLang, Kafka, RabbitMQ, Amazon SQS, Amazon EventBridge, or Google Cloud Pub/Sub. Many of these recent languages and tools embrace the original integration patterns or make it easy to implement them.
The following patterns contain modern examples:
|Publish-Subscribe Channel||Google Cloud Pub/sub|
|Dead Letter Channel||Amazon SQS
|Message Expiration||Azure Service Bus
Google Cloud PubSub
|Content-based Router||Apache Camel|
|Scatter-Gather||Serverless Loan Broker on AWS
Azure Durable Functions: Fan out/fan in
|Aggregator||Serverless Loan Broker on AWS (Lambda, DynamoDB)
Serverless Loan Broker on GCP (Cloud Function, Datastore)
|Process Manager||Serverless Loan Broker with AWS Step Functions
Serverless Loan Broker with GCP Workflows
|Content Enricher||Amazon EventBridge Pipes|
|Transactional Client||Amazon SQS|
|Competing Consumers||Apache Kafka|
|Channel Purger||Amazon SQS|
Back in 2003, hosting code on open source repositories was less common. Lucky we used version control for the text as well as the code samples, but sadly both lived on a local hard drive in a Visual Source Safe repository. We converted them to git since and I now upload all new code samples to a public Github Repository. Most projects don't include complete build files - I run these simple apps from IntelliJ IDEA. This is both a bug (due to laziness) and a feature: as the examples are of educational value only and not intended for production there's a certain safety net in users not being able to build and run them immediately with the push of a button.