- Published on
EAI (Enterprise Application Integration) Complete Guide: Everything About Enterprise System Integration
- Authors

- Name
- Youngju Kim
- @fjvbn20031
- Introduction
- 1. What Is EAI?
- 2. Four EAI Integration Topologies
- 3. Enterprise Integration Patterns (EIP) -- The Gregor Hohpe Bible
- 4. Data Integration Patterns
- 5. EAI Platform Comparison (2025)
- 6. Hands-On Project: ERP-CRM-WMS Integration
- 7. EAI and Modern Architecture Convergence
- 8. EAI in Korean Enterprises
- Practice Quiz
- References
Introduction
Most enterprises do not run on a single system. Dozens to hundreds of applications operate simultaneously -- ERP, CRM, WMS, HR, and accounting systems, to name a few. The problem is that these systems use different vendors, different technology stacks, and different data formats. EAI (Enterprise Application Integration) is the technology and strategy that ties these heterogeneous systems together into one cohesive ecosystem.
This guide covers EAI from A to Z: history and core concepts, four integration topologies, Gregor Hohpe's Enterprise Integration Patterns, major platform comparisons, and a hands-on project.
1. What Is EAI?
1-1. The Need for Enterprise System Integration: The Silo Problem
As companies grow, data silos naturally emerge:
- Sales team: Manages customer info in Salesforce CRM
- Logistics team: Manages inventory/shipping in WMS (Warehouse Management System)
- Finance team: Handles accounting in SAP ERP
- Marketing team: Manages campaign data in HubSpot
- Customer support team: Manages tickets in Zendesk
When each system operates independently, the following problems arise:
- Data inconsistency: Customer address updated in CRM but not reflected in ERP
- Increased manual work: Download CSV and manually upload to another system
- Lack of real-time data: Must log into WMS separately to check inventory
- Wasted costs: Duplicate entry of the same data across multiple systems
EAI breaks down these silos and integrates data and processes across systems automatically, in real-time, and reliably.
1-2. History of EAI
The evolution of EAI mirrors the development of enterprise IT infrastructure:
| Era | Integration Method | Key Technologies | Characteristics |
|---|---|---|---|
| Early 1990s | Point-to-Point | Custom code, FTP | Individual connections, spaghetti |
| Late 1990s | Hub-and-Spoke | TIBCO, IBM MQ | Central hub management |
| 2000s | ESB | MuleSoft ESB, Oracle ESB, IBM IIB | Distributed bus, SOA |
| 2010s | API-Led | REST API, API Gateway | Microservices era |
| 2020s | Event-Driven + iPaaS | Kafka, Workato, MuleSoft Anypoint | Event-driven, cloud-native |
1-3. EAI vs SOA vs Microservices vs API Management
These four concepts are frequently confused. Let's clarify their relationship:
- EAI: An "integration strategy" for connecting existing systems. Focuses on goals rather than technology
- SOA (Service-Oriented Architecture): An "architecture style" for composing systems from reusable services. One way to implement EAI
- Microservices: Evolution of SOA. Smaller units, independent deployment, polyglot. Can coexist with EAI
- API Management: Manages the API lifecycle (design, gateway, monitoring). One layer of EAI
EAI (Integration Strategy)
├── SOA (Architecture Style)
│ └── Microservices (SOA Evolution)
├── API Management (API Management Layer)
├── Message Broker (Async Integration)
└── iPaaS (Cloud Integration Platform)
1-4. Integration Market Size
The EAI/integration market continues to grow steadily:
- 2025 Global Market: Approximately $15 billion
- CAGR: Approximately 12%
- 2030 Forecast: Approximately $27 billion
- Key Growth Drivers: Cloud migration, SaaS proliferation, AI/ML integration demand
2. Four EAI Integration Topologies
2-1. Point-to-Point
The most primitive integration approach. System A connects directly to System B.
System A ←→ System B
System A ←→ System C
System B ←→ System C
System A ←→ System D
System B ←→ System D
System C ←→ System D
Connection formula: For N systems, N*(N-1)/2 connections needed
- 5 systems: 10 connections
- 10 systems: 45 connections
- 20 systems: 190 connections
- 50 systems: 1,225 connections
This is called spaghetti architecture. Maintenance becomes a nightmare.
When is it acceptable?
- Small organizations with only 2-3 systems
- Temporary integrations (PoC, migration)
- Extremely limited budget and time
2-2. Hub-and-Spoke
All systems connect through a central Hub.
System A
|
System D ── HUB ── System B
|
System C
Advantages:
- Centralized management: All integration logic concentrated in the hub
- Fewer connections: N systems = N connections (vs N*(N-1)/2 for P2P)
- Minimal change impact: Adding a new system only requires connecting to the hub
- Centralized transformation: Data mapping/transformation logic managed in one place
Disadvantages:
- Single Point of Failure (SPOF): If the hub goes down, all integration stops
- Hub bottleneck: Hub becomes a bottleneck under heavy traffic
- Scaling limitations: Horizontal scaling is difficult
- Vendor lock-in: Tied to a specific vendor's hub product
Representative products: IBM WebSphere Message Broker, TIBCO BusinessWorks
2-3. ESB (Enterprise Service Bus)
ESB emerged to solve the single point of failure problem of Hub-and-Spoke. It uses a distributed bus architecture.
System A ── Adapter ──┐
│
System B ── Adapter ──┼── ESB (Distributed Message Bus) ──┼── Adapter ── System E
│ │
System C ── Adapter ──┘ └── Adapter ── System F
Core ESB capabilities:
- Message routing: Delivers messages to appropriate destinations
- Protocol transformation: Converts between SOAP/REST/JMS/FTP protocols
- Data transformation: Converts between XML/JSON/CSV data formats
- Orchestration: Composes multiple service calls in sequence
- Security: Authentication/authorization, message encryption
- Monitoring: Message tracing, performance monitoring
Major ESB products:
- MuleSoft ESB (now evolved into Anypoint Platform)
- IBM Integration Bus (formerly IBM Message Broker)
- WSO2 Enterprise Integrator
- TIBCO BusinessWorks
- Oracle Service Bus
Why ESB is declining:
- Monolithic bottleneck: The ESB itself becomes a massive monolith, hard to maintain
- Deployment complexity: ESB changes affect all integrations
- Poor cloud fit: Designed for on-premise, doesn't suit cloud environments
- Conflicts with microservices: Contradicts the microservices philosophy of distributed autonomy
2-4. API-Led Connectivity (Modern Approach)
A modern integration methodology proposed by MuleSoft. Uses a 3-tier API architecture.
[Mobile/Web/Partners]
│
Experience API (Channel-specific)
│
Process API (Business logic composition)
│
System API (Backend system abstraction)
│
[SAP / Salesforce / DB / Legacy]
3-tier explanation:
- System API: Abstracts backend systems (SAP, Salesforce, DB) as REST APIs. Hides technical complexity
- Process API: Composes multiple System APIs into business processes. Example: Order processing = inventory check + payment + shipping
- Experience API: Provides optimized APIs for each consumer (mobile, web, partner)
Modern hybrid: API Gateway + Event Mesh
[Clients]
│
API Gateway (Synchronous requests)
│ Event Mesh (Asynchronous events)
├── REST API ───────── Kafka / EventBridge
└── GraphQL │
┌──────┼──────┐
Service A Service B Service C
Comparison: Four Topologies
| Aspect | Point-to-Point | Hub-and-Spoke | ESB | API-Led |
|---|---|---|---|---|
| Complexity | Explodes with system count | Medium | High | Medium |
| Scalability | Very low | Low | Medium | High |
| Failure impact | Individual connections | Full outage if hub down | Partial | Isolated by tier |
| Maintenance | Very difficult | Medium | Difficult | Easy |
| Cloud fitness | Low | Low | Low | High |
| Cost | Low initial, high long-term | Medium | High | Medium |
| Recommended for | Small-scale temporary | Mid-size on-premise | Legacy SOA | Modern cloud/MSA |
3. Enterprise Integration Patterns (EIP) -- The Gregor Hohpe Bible
Published in 2003 by Gregor Hohpe and Bobby Woolf, Enterprise Integration Patterns is considered the bible of EAI. This book systematically organizes 65 messaging patterns and remains the theoretical foundation for nearly every integration framework -- Apache Camel, Spring Integration, MuleSoft -- even 20+ years later.
3-1. Message Channel
A pipeline for delivering data between applications.
// Apache Camel - Message Channel definition
from("jms:queue:orders") // Input channel
.to("jms:queue:validated"); // Output channel
Channel types:
- Point-to-Point Channel: 1:1 delivery (Queue)
- Publish-Subscribe Channel: 1:N delivery (Topic)
- Datatype Channel: Channel dedicated to a specific data type
- Dead Letter Channel: Channel for storing failed messages
3-2. Message Router
Routes messages to appropriate channels based on conditions.
Content-Based Router
Analyzes message content to determine routing.
// Apache Camel - Content-Based Router
from("jms:queue:orders")
.choice()
.when(xpath("/order/country = 'US'"))
.to("jms:queue:orders-us")
.when(xpath("/order/country = 'EU'"))
.to("jms:queue:orders-eu")
.when(xpath("/order/country = 'APAC'"))
.to("jms:queue:orders-apac")
.otherwise()
.to("jms:queue:orders-other")
.end();
Message Filter
Passes only messages that match a condition.
// Apache Camel - Message Filter
from("jms:queue:orders")
.filter(xpath("/order/amount > 10000"))
.to("jms:queue:high-value-orders");
3-3. Message Translator
Converts between different data formats.
// Apache Camel - XML to JSON transformation
from("jms:queue:orders-xml")
.unmarshal().jacksonXml(Order.class)
.marshal().json(JsonLibrary.Jackson)
.to("jms:queue:orders-json");
3-4. Splitter and Aggregator
Splitter: Breaks a single message into multiple messages.
// Apache Camel - Splitter
from("jms:queue:batch-orders")
.split(xpath("/orders/order"))
.to("jms:queue:single-order");
Aggregator: Combines multiple messages into one.
// Apache Camel - Aggregator
from("jms:queue:single-order-result")
.aggregate(header("batchId"), new OrderAggregationStrategy())
.completionSize(10)
.completionTimeout(5000)
.to("jms:queue:batch-result");
3-5. Dead Letter Channel
Stores failed messages separately for later processing.
// Apache Camel - Dead Letter Channel
errorHandler(deadLetterChannel("jms:queue:dead-letters")
.maximumRedeliveries(3)
.redeliveryDelay(1000)
.retryAttemptedLogLevel(LoggingLevel.WARN));
from("jms:queue:orders")
.process(exchange -> {
// Processing logic - automatically sent to DLC on failure
Order order = exchange.getIn().getBody(Order.class);
orderService.process(order);
})
.to("jms:queue:processed-orders");
3-6. Idempotent Consumer
Ensures identical results even when the same message is received multiple times. Prevents duplicate processing during network retransmissions or system restarts.
// Apache Camel - Idempotent Consumer (memory-based)
from("jms:queue:orders")
.idempotentConsumer(
header("orderId"),
MemoryIdempotentRepository.memoryIdempotentRepository(200)
)
.to("jms:queue:unique-orders");
// Redis-based idempotency (recommended for production)
from("jms:queue:orders")
.idempotentConsumer(
header("orderId"),
new RedisIdempotentRepository(redisTemplate, "processed-orders")
)
.to("jms:queue:unique-orders");
3-7. Wire Tap
Copies messages to a separate destination without interfering with the main message flow. Used for logging, auditing, and monitoring.
// Apache Camel - Wire Tap
from("jms:queue:orders")
.wireTap("jms:queue:order-audit") // Audit copy
.to("jms:queue:order-processing"); // Main flow continues
3-8. EIP Pattern Summary
| Pattern | Purpose | Use Case |
|---|---|---|
| Content-Based Router | Content-based routing | Route orders by country |
| Message Filter | Conditional filtering | Process only high-value orders |
| Splitter | Message splitting | Break batch into individual items |
| Aggregator | Message aggregation | Combine individual results into response |
| Dead Letter Channel | Failed message storage | Reprocessing/analysis |
| Idempotent Consumer | Duplicate prevention | Prevent duplicate order processing |
| Wire Tap | Non-intrusive copying | Audit logging |
| Publish-Subscribe | 1:N delivery | Event broadcasting |
| Message Translator | Format conversion | XML to JSON |
| Routing Slip | Dynamic routing | Multi-step processing by order type |
4. Data Integration Patterns
4-1. Canonical Data Model (CDM)
When exchanging data between N systems, instead of each system knowing every other system's format, all systems convert to and from one standard format (CDM).
Without CDM (N:N mapping):
SAP (IDOC) <-> Salesforce (SOQL)
SAP (IDOC) <-> WMS (CSV)
Salesforce (SOQL) <-> WMS (CSV)
= 3 mappings (for 3 systems)
With CDM (N:1 mapping):
SAP (IDOC) -> CDM (JSON) -> Salesforce
WMS (CSV) -> CDM (JSON) -> Salesforce
SAP (IDOC) -> CDM (JSON) -> WMS
= Only 1 mapping per system to/from CDM
CDM design principles:
- Neutrality: Schema not biased toward any specific system
- Extensibility: CDM can be extended when adding new systems
- Version management: Schema versioning is essential
- Documentation: Specify field meanings, data types, and constraints
{
"canonicalOrder": {
"orderId": "ORD-2026-001",
"orderDate": "2026-03-23T10:30:00Z",
"customer": {
"customerId": "CUST-001",
"name": "John Smith",
"email": "john@example.com"
},
"items": [
{
"productId": "PROD-100",
"productName": "Laptop",
"quantity": 2,
"unitPrice": 1200.0,
"currency": "USD"
}
],
"totalAmount": 2400.0,
"status": "CREATED"
}
}
4-2. Data Format Comparison
| Format | Use Case | Advantages | Disadvantages |
|---|---|---|---|
| XML | Enterprise (SOAP, ESB) | Schema validation (XSD), mature ecosystem | Verbose, slow parsing |
| JSON | REST API, Web | Lightweight, readable, fast parsing | Weak schema validation |
| CSV | Batch data, reports | Simple, universal | Structural limits, no types |
| EDI | B2B e-commerce | Industry standard (EDIFACT, X12) | Complex, legacy |
| Protobuf | gRPC, high-performance | Very small and fast, enforced schema | Not human-readable |
| Avro | Kafka, big data | Schema evolution, Kafka-optimized | Limited ecosystem |
4-3. Data Mapping Tools
XSLT (XML Transformation)
<!-- XSLT to transform SAP IDOC to CDM -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/ORDERS05">
<canonicalOrder>
<orderId><xsl:value-of select="IDOC/E1EDK01/BELNR"/></orderId>
<orderDate><xsl:value-of select="IDOC/E1EDK01/DATUM"/></orderDate>
<customer>
<customerId><xsl:value-of select="IDOC/E1EDKA1/PARVW"/></customerId>
<name><xsl:value-of select="IDOC/E1EDKA1/NAME1"/></name>
</customer>
</canonicalOrder>
</xsl:template>
</xsl:stylesheet>
DataWeave (MuleSoft)
%dw 2.0
output application/json
---
{
canonicalOrder: {
orderId: payload.ORDERS05.IDOC.E1EDK01.BELNR,
orderDate: payload.ORDERS05.IDOC.E1EDK01.DATUM as Date,
customer: {
customerId: payload.ORDERS05.IDOC.E1EDKA1.PARVW,
name: payload.ORDERS05.IDOC.E1EDKA1.NAME1
},
items: payload.ORDERS05.IDOC.E1EDP01 map ((item) -> {
productId: item.MATNR,
quantity: item.MENGE as Number,
unitPrice: item.NETPR as Number
})
}
}
JSONata (Lightweight JSON Transformation)
{
"canonicalOrder": {
"orderId": sapOrder.BELNR,
"orderDate": sapOrder.DATUM,
"customer": {
"customerId": sapOrder.PARVW,
"name": sapOrder.NAME1
},
"totalAmount": $sum(sapOrder.items.(MENGE * NETPR))
}
}
4-4. Master Data Management (MDM)
MDM is a strategy for maintaining a Single Source of Truth for core data (customers, products, organizations) across the entire enterprise.
Why MDM matters for EAI:
- Integration is difficult when customer IDs differ across systems (SAP: KUNNR-10001, Salesforce: ACC-00001)
- MDM assigns a global customer ID and manages a mapping table
- Cross-reference table: SAP KUNNR-10001 = Salesforce ACC-00001 = MDM CUST-001
4-5. CDC (Change Data Capture) - Debezium
CDC detects database changes in real-time and propagates them to other systems. Debezium is a leading open-source CDC solution.
# Debezium connector configuration (MySQL)
name: mysql-connector
config:
connector.class: io.debezium.connector.mysql.MySqlConnector
database.hostname: mysql-server
database.port: 3306
database.user: debezium
database.password: secret
database.server.id: 1
topic.prefix: myapp
database.include.list: ecommerce
table.include.list: ecommerce.orders,ecommerce.customers
schema.history.internal.kafka.bootstrap.servers: kafka:9092
schema.history.internal.kafka.topic: schema-changes
[MySQL DB] -> [Debezium Connector] -> [Kafka Topic] -> [Consumer App]
-> [Elasticsearch]
-> [Data Warehouse]
CDC advantages:
- Real-time: Minimal latency compared to polling (millisecond level)
- Non-invasive: Captures directly from DB logs (binlog) without application code changes
- Complete: Captures all INSERT, UPDATE, DELETE changes
5. EAI Platform Comparison (2025)
5-1. MuleSoft Anypoint Platform
The undisputed enterprise integration leader, owned by Salesforce.
Core components:
- Anypoint Studio: Eclipse-based IDE with visual flow designer
- DataWeave: MuleSoft's proprietary data transformation language
- API Manager: API lifecycle management (design, gateway, analytics)
- Runtime Manager: Deployment and runtime management (CloudHub, On-Prem, Hybrid)
- Anypoint Exchange: Marketplace for reusable connectors/templates
Advantages:
- Native integration with Salesforce ecosystem
- Pioneer of API-Led Connectivity methodology
- 400+ pre-built connectors
- Powerful DataWeave transformation language
Disadvantages:
- Very expensive (annual cost of 500K+)
- High vendor lock-in
- Learning curve (DataWeave, Anypoint Studio)
5-2. Apache Camel + Spring Boot
The gold standard of open-source integration frameworks. Fully implements Gregor Hohpe's EIP in code.
// Spring Boot + Apache Camel example
@Component
public class OrderIntegrationRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
// Error handling
errorHandler(deadLetterChannel("kafka:dead-letters")
.maximumRedeliveries(3)
.redeliveryDelay(2000));
// Receive orders from SAP -> transform -> send to CRM
from("sap-idoc:ORDERS05")
.routeId("sap-to-crm-orders")
.log("SAP order received: orderId=${header.orderId}")
.unmarshal().jacksonXml(SapOrder.class)
.bean(OrderTransformer.class, "toCanonical")
.marshal().json(JsonLibrary.Jackson)
.choice()
.when(simple("${body[totalAmount]} > 100000"))
.to("kafka:high-value-orders")
.otherwise()
.to("kafka:standard-orders")
.end()
.to("salesforce:upsert:Order__c?sObjectIdName=SAP_Order_Id__c");
}
}
Key features:
- 300+ components: Kafka, AWS, SAP, Salesforce, DB, FTP, HTTP, etc.
- Full EIP implementation: All 65 patterns available in code
- Camel K: Kubernetes-native lightweight integration (serverless)
- Camel Quarkus: GraalVM native image support (ultra-fast startup)
Advantages:
- Free open-source (Apache License 2.0)
- Large community
- Seamless Spring Boot integration
- Flexible DSL (Java, XML, YAML, Kotlin)
Disadvantages:
- No built-in UI (can supplement with Hawtio)
- Must manage infrastructure yourself
- Not accessible to non-developers
5-3. Dell Boomi
A pioneer of cloud-native iPaaS.
Key features:
- AtomSphere Platform: Cloud-based integration platform
- Atom Runtime: Lightweight, run-anywhere runtime
- Low-code interface: Drag-and-drop flow builder
- AI recommendations: Suggest feature for automatic mapping proposals
Advantages:
- Fast development speed (low-code)
- Cloud-native design
- Accessible to non-developers
- Quick connector setup
Disadvantages:
- Limited for complex logic
- Performance limitations for high-volume data
- Lower customization freedom
5-4. Workato / Tray.io
Business-user-friendly iPaaS.
Key features:
- Recipe-based automation: IF-THEN style workflows
- 1,000+ connectors: SaaS app-centric
- AI copilot: Create integration flows using natural language
- Workbot: Execute integrations directly from Slack/Teams
Advantages:
- Business users can automate directly
- Optimized for SaaS app integration
- Fast implementation (hours, not days)
Disadvantages:
- Weak for enterprise legacy integration
- Limited complex transformation logic
- Costs can escalate rapidly with usage
Platform Comparison Table
| Aspect | MuleSoft | Apache Camel | Dell Boomi | Workato |
|---|---|---|---|---|
| Type | iPaaS + On-Prem | Open-source framework | iPaaS | iPaaS |
| Cost | Very high (500K+/yr) | Free (infra cost only) | High ($50K+/yr) | Medium ($10K+/yr) |
| Learning curve | Medium-High | High (developers) | Low | Very low |
| Scalability | Very high | Very high | High | Medium |
| Cloud | Hybrid | All | Cloud-first | Cloud-only |
| Community | Large | Very large | Medium | Medium |
| Legacy integration | Strong | Very strong | Medium | Weak |
| SaaS integration | Strong | Medium | Strong | Very strong |
| Target users | Developers + Architects | Developers | Developers + Non-devs | Non-devs + Developers |
6. Hands-On Project: ERP-CRM-WMS Integration
6-1. Scenario
A mid-size e-commerce company wants to integrate these three systems:
- SAP ERP: Order management, accounting, finance
- Salesforce CRM: Customer management, sales pipeline
- In-house WMS: Inventory management, shipment tracking
Integration requirements:
- When an order is created on the website, register it in SAP ERP
- After SAP confirms inventory, send shipment instruction to WMS
- When WMS starts shipping, update status in Salesforce
- All processes must be asynchronous, real-time, and fault-tolerant
6-2. Architecture Design
[Website] -> REST API -> [API Gateway]
│
[Apache Camel Hub]
┌──────┼──────────┐
│ │ │
[Kafka] [Kafka] [Kafka]
orders inventory shipping
│ │ │
[SAP ERP] [WMS] [Salesforce CRM]
│ │ │
└──────┼──────────┘
│
[Monitoring]
Prometheus + Grafana
6-3. Camel Route Code (Java DSL)
@Component
public class EcommerceIntegrationRoutes extends RouteBuilder {
@Override
public void configure() throws Exception {
// ===== Global Error Handling =====
errorHandler(deadLetterChannel("kafka:dead-letter-queue")
.maximumRedeliveries(3)
.redeliveryDelay(2000)
.backOffMultiplier(2)
.useExponentialBackOff()
.retryAttemptedLogLevel(LoggingLevel.WARN)
.logRetryStackTrace(true));
// ===== Step 1: Order Intake -> SAP ERP Registration =====
from("rest:post:/api/orders")
.routeId("order-intake")
.log("New order received: ${body}")
.unmarshal().json(JsonLibrary.Jackson, OrderRequest.class)
.bean(OrderValidator.class, "validate")
.bean(OrderTransformer.class, "toCanonical")
.marshal().json(JsonLibrary.Jackson)
.to("kafka:orders?brokers=localhost:9092")
.setBody(simple("Order accepted. Order ID: ${header.orderId}"));
// SAP ERP Order Registration
from("kafka:orders?brokers=localhost:9092&groupId=sap-consumer")
.routeId("sap-order-registration")
.idempotentConsumer(
header("orderId"),
new RedisIdempotentRepository(redisTemplate, "sap-orders")
)
.unmarshal().json(JsonLibrary.Jackson, CanonicalOrder.class)
.bean(SapOrderTransformer.class, "toSapIdoc")
.to("sap-idoc:ORDERS05")
.log("SAP order registration complete: ${header.orderId}")
.to("kafka:inventory-check?brokers=localhost:9092");
// ===== Step 2: Inventory Check -> WMS Shipment =====
from("kafka:inventory-check?brokers=localhost:9092&groupId=wms-consumer")
.routeId("inventory-check-and-ship")
.unmarshal().json(JsonLibrary.Jackson, CanonicalOrder.class)
.bean(InventoryService.class, "checkAvailability")
.choice()
.when(simple("${header.inventoryAvailable} == true"))
.log("Inventory available: ${header.orderId}")
.bean(WmsTransformer.class, "toShipmentRequest")
.to("http://wms-api.internal:8080/api/shipments")
.to("kafka:shipping-started?brokers=localhost:9092")
.otherwise()
.log("Inventory shortage: ${header.orderId}")
.to("kafka:backorder-queue?brokers=localhost:9092")
.end();
// ===== Step 3: Shipping Started -> Salesforce Status Update =====
from("kafka:shipping-started?brokers=localhost:9092&groupId=crm-consumer")
.routeId("crm-status-update")
.unmarshal().json(JsonLibrary.Jackson, ShipmentEvent.class)
.bean(SalesforceTransformer.class, "toOpportunityUpdate")
.to("salesforce:upsert:Opportunity?sObjectIdName=Order_Id__c")
.log("Salesforce status update complete: ${header.orderId}");
// ===== Circuit Breaker =====
from("kafka:critical-orders?brokers=localhost:9092")
.routeId("circuit-breaker-route")
.circuitBreaker()
.resilience4jConfiguration()
.failureRateThreshold(50)
.waitDurationInOpenState(30000)
.slidingWindowSize(10)
.end()
.to("http://payment-service:8080/api/process")
.onFallback()
.log("Payment service failure - executing fallback")
.to("kafka:payment-retry-queue?brokers=localhost:9092")
.end();
}
}
6-4. Monitoring Setup
# docker-compose-monitoring.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
ports:
- '9090:9090'
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:latest
ports:
- '3000:3000'
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
# Camel metrics exposure
camel-app:
build: .
ports:
- '8080:8080'
- '8081:8081' # Actuator/Prometheus metrics
environment:
- MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE=health,prometheus
- MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED=true
Key monitoring metrics:
camel_exchanges_total: Total processed messagescamel_exchanges_failed_total: Failed message countcamel_exchange_processing_seconds: Processing time (p50, p95, p99)kafka_consumer_lag: Kafka consumer lag (the most critical metric)
7. EAI and Modern Architecture Convergence
7-1. EAI + Microservices
EAI does not disappear in a microservices environment. Rather, it evolves into Service Mesh and Event Mesh.
[Microservice A] ──── API Gateway (Sync) ──── [Microservice B]
│ │
└──── Event Mesh (Kafka/EventBridge) ──────────┘
│
[Legacy ERP] <- Apache Camel Adapter
Key patterns:
- API Gateway: Synchronous request/response (REST, GraphQL)
- Event Mesh: Asynchronous event delivery (Kafka, AWS EventBridge)
- Sidecar: Integration logic injected into each service (Envoy, Dapr)
7-2. EAI + Cloud
In cloud environments, EAI evolves into iPaaS and serverless.
| On-Premise EAI | Cloud EAI |
|---|---|
| ESB server management | iPaaS (managed) |
| Self-managed message queues | Amazon SQS / Azure Service Bus |
| Self-managed monitoring | CloudWatch / Datadog |
| Manual scaling | Auto-scaling |
| CAPEX-centric | OPEX (pay-as-you-go) |
AWS-based Serverless EAI Architecture:
[External System] -> API Gateway -> Lambda (Transform) -> EventBridge -> Step Functions
│
┌──────────┼──────────┐
Lambda A Lambda B Lambda C
(SAP) (SF) (WMS)
│ │ │
└─────────┼─────────┘
│
DynamoDB (State)
│
CloudWatch (Monitoring)
7-3. EAI + AI
Innovations AI brings to EAI:
- Automatic data mapping: AI suggests source-to-target field mappings automatically
- Anomaly detection: Automatically detects abnormal patterns in integration pipelines
- Self-healing: AI executes automatic recovery strategies when failures occur
- Natural language integration: Say "Sync SAP orders to Salesforce" and pipelines are generated automatically
7-4. EAI + MCP (Model Context Protocol)
MCP, which emerged in 2025, is a protocol that enables AI agents to communicate with external tools in a standardized way. When EAI and MCP combine, AI agents can directly orchestrate EAI pipelines.
[AI Agent (Claude, GPT)]
│
MCP Protocol
│
[MCP Server: EAI Orchestrator]
├── Tool: createIntegrationFlow
├── Tool: monitorPipeline
├── Tool: triggerDataSync
└── Tool: debugFailedMessages
│
[Apache Camel / MuleSoft / AWS Step Functions]
Future scenario:
- "Analyze the SAP order messages that failed in the last hour, identify the root cause, and reprocess them"
- The AI agent queries the Dead Letter Queue via MCP, analyzes error patterns, fixes the issues, and retransmits
8. EAI in Korean Enterprises
8-1. Major Korean EAI Solutions
Korean enterprises use a mix of global and domestic solutions.
| Solution | Developer | Major Clients | Features |
|---|---|---|---|
| Nexledger | Samsung SDS | Samsung Group | Blockchain integration, Samsung ecosystem optimization |
| LG CNS EAI | LG CNS | LG Group | LG Group internal standard |
| SK C&C EAI | SK C&C | SK Group | SK Group infrastructure integration |
| X-Platform | TOBESOFT | Finance, Public sector | UI/UX strength, legacy connectivity |
| AnyLink | BizFlow | Finance, Manufacturing | High market share in Korean finance |
8-2. eGovFrame and ESB
Korean public institutions build systems based on the eGovFrame (Electronic Government Framework).
- eGovFrame: Spring-based Korean standard framework
- Integration service: Standard components for inter-system data exchange
- ESB layer: Data exchange between public institutions (shared administrative information, etc.)
8-3. Financial Sector EAI
Korean financial sector EAI has a unique structure:
- FEP (Front-End Processor): Handles telegram communication with external institutions (banks, card companies)
- MCI (Multi Channel Integration): Integrates internet banking, mobile, ATM, and other channels
- EAI: Internal integration between core banking, CRM, and risk systems
[Internet Banking] ──┐
[Mobile Banking] ───┤── MCI ── EAI ── Core Banking
[ATM] ───┤ │
[Teller System] ───┘ ├── CRM
├── Risk
└── FEP -> KFTC/Card Companies/Insurers
Financial EAI special requirements:
- Telegram format: Fixed-length telegrams, TCP/IP socket communication
- Zero downtime: 24/7 availability, redundancy mandatory
- Audit trail: Logging/auditing of all transactions (FSS regulations)
- Encryption: Encryption/decryption of personal info and financial transaction data
8-4. Public Institution Integration
- Administrative digital signature: Digital signature authentication for electronic document exchange between government agencies
- Public API integration: Data connectivity through the Public Data Portal (data.go.kr)
- Government e-Procurement: Bidding/contract data integration with the Public Procurement Service
- Social insurance integration: Data unification across four major insurance systems (national pension, health insurance, employment insurance, workers' compensation)
Practice Quiz
Q1. Point-to-Point Connection Count
How many connections are needed to connect 10 systems using Point-to-Point?
View Answer
45 connections
Formula: N _ (N-1) / 2 = 10 _ 9 / 2 = 45
This is exactly why Point-to-Point is unsuitable for large-scale systems. Hub-and-Spoke would need only 10 connections.
Q2. Why ESB Is Declining
What is the most fundamental reason ESB (Enterprise Service Bus) is declining in modern architecture?
View Answer
The ESB itself becomes a monolithic bottleneck.
As all integration logic concentrates in the ESB, it becomes a massive monolith. Changing one integration flow can affect others, and deployment becomes difficult. This directly conflicts with the microservices philosophy of independent deployment and distributed autonomy.
The modern alternative is the API-Led Connectivity + Event Mesh combination.
Q3. Idempotent Consumer Pattern
When the same order message is delivered 3 times from a message broker, what EIP pattern prevents duplicate processing, and what is the key implementation detail?
View Answer
Idempotent Consumer pattern
Key implementation:
- Check whether a message has already been processed based on a unique identifier (e.g., orderId)
- Store processed message IDs in a repository (Redis, DB, memory)
- Skip messages with duplicate IDs
In Apache Camel, this is simply implemented using the idempotentConsumer() DSL. For production, use Redis or DB-based repositories to handle distributed environments.
Q4. CDM (Canonical Data Model) Advantage
Compare the number of mappings needed with and without CDM when exchanging data between 5 systems.
View Answer
Without CDM: Each system must know every other system's format, requiring N _ (N-1) = 5 _ 4 = 20 mappings (bidirectional)
With CDM: Each system only converts to/from CDM, requiring N _ 2 = 5 _ 2 = 10 mappings (system-to-CDM, CDM-to-system)
With CDM, adding a new system only requires 2 additional mappings (to CDM and from CDM).
Q5. MuleSoft vs Apache Camel
A startup (3 developers, limited budget) needs to integrate SAP with Shopify. Would you recommend MuleSoft or Apache Camel?
View Answer
Apache Camel + Spring Boot is recommended.
Reasons:
- Cost: MuleSoft costs $50K+ annually. Excessive for a startup. Apache Camel is free
- Developer-friendly: With 3 developers, code-based Camel enables faster learning and implementation
- Connectors: Camel has SAP component (
camel-sap) and Shopify REST API integration - Scalability: As systems grow, just add more Camel Routes
- Cloud: Easy Kubernetes deployment with Camel K
However, if non-developers need to manage integrations or the Salesforce ecosystem is central, MuleSoft may be more suitable.
References
Books
- Gregor Hohpe, Bobby Woolf, Enterprise Integration Patterns (Addison-Wesley, 2003)
- Gregor Hohpe, The Software Architect Elevator (O'Reilly, 2020)
- Claus Ibsen, Jonathan Anstey, Camel in Action (Manning, 2nd Edition, 2018)
Official Documentation
- Apache Camel Official Docs: https://camel.apache.org/manual/
- MuleSoft Developer Center: https://developer.mulesoft.com/
- Dell Boomi Documentation: https://help.boomi.com/
- Spring Integration: https://docs.spring.io/spring-integration/reference/
- Debezium Documentation: https://debezium.io/documentation/
EIP Reference
- Enterprise Integration Patterns Official Site: https://www.enterpriseintegrationpatterns.com/
- Apache Camel EIP Implementation: https://camel.apache.org/components/latest/eips/enterprise-integration-patterns.html
Cloud Integration
- AWS Step Functions: https://docs.aws.amazon.com/step-functions/
- AWS EventBridge: https://docs.aws.amazon.com/eventbridge/
- Azure Integration Services: https://learn.microsoft.com/en-us/azure/integration-services/
- Google Cloud Integration Connectors: https://cloud.google.com/integration-connectors/docs
Market Analysis
- Gartner Magic Quadrant for Integration Platform as a Service: https://www.gartner.com/reviews/market/integration-platform-as-a-service
- Forrester Wave: Enterprise iPaaS: https://www.forrester.com/
Korean EAI
- eGovFrame Portal: https://www.egovframe.go.kr/
- Public Data Portal: https://www.data.go.kr/
- Korea Financial Telecommunications and Clearings Institute: https://www.kftc.or.kr/
Community
- Apache Camel GitHub: https://github.com/apache/camel
- MuleSoft Community: https://help.mulesoft.com/s/forum
- Debezium GitHub: https://github.com/debezium/debezium
- Kafka Documentation: https://kafka.apache.org/documentation/