Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions