SlideShare a Scribd company logo
Enterprise Integration
Patterns in Practice
Andreas Egloff
Sun Microsystems
Bruce Snyder
SpringSource
&
What Are Design Patterns? 
A design pattern is a formal way of
documenting a solution to a design
problem in a particular field of expertise.
(Wikipedia)
2
Got EIP?
Core Principles of EIP
> Patterns using asynchronous messaging as a style
of integration
> Pros
• Scaling
• Decoupling
> Cons
• Latency vs. throughput
• Decoupling not always appropriate
4
Pattern Overview
5
Identifying and Expressing Patterns
6
Layers of Functionality
> Not an either/or choice, combine layers as
appropriate
7
Message Flow / Service Composition
> Strengths and uses
• De-coupling and re-using Services
• Easier to evolve
• Scaling, Throughput
• Asynchronous nature
• Message routing, processing, transformation
• Easy to mediate
8
Message Endpoints / Services
> Message Endpoints / Services
• Message based interface
• Expose coarse grained services
• Typically stateless
• Anticipate re-use
• Visibility scope examples
• Within application
• Within ESB
• Anyone with access to JMS server
• External
9
Code Composition
> Strengths and uses
• Fine grained API access
• Stateful, fine grained interactions
• Low latency
> Challenge
• Interface tighter coupled
10
Implicit and Explicit Patterns
> Some patterns inherent in technology / framework
• Not every pattern a "keyword"
• e.g. JMS publish/subscribe ...
> Patterns realized in user code 
• e.g. Scatter-Gather realized in Java
> Platform has pre-built constructs
• e.g. Unix pipe symbol "|" : pipes-and-filters  
• Route in Camel or Fuji: pipes-and-filters
11
Visualizing EIPs
• Stencils exist for Visio and OmniGraffle 
• http://www.eaipatterns.com/downloads.html  
12
Patterns in Practice
13
> Issue: Too little explicit support out-of-the-box
• Too much roll your own
> Issue: Explicit support out-of-the-box is too rigid
• Does not exactly fit the use case
• Forced to work around or again roll your own
> What you want is out-of-the-box productivity with
explicit constructs AND flexibility to customize the
constructs
Gotcha - Flexibility vs. Productivity
14
Intro to Frameworks 
• Apache Camel
• http://camel.apache.org/
• Project Fuji / OpenESB v3
• http://fuji.dev.java.net/
15
What is Apache Camel? 
A framework for simplifying integration
through the use of the 
Enterprise Integration Patterns for
message mediation, processing,
routing and transformation
http://camel.apache.org/
16
Apache Camel is Focused on EIP
17
http://camel.apache.org/
=>
http://eaipatterns.com/
Message Routing
18
from("A").to("B");
Slightly More Complex Routing
19
from("file:///tmp/myFile.txt").
to("bean:MyBean?method=handleMessage").
to("jms:TEST.Q");
Multicast Routing
20
from("file:///tmp/myFile.txt").
choice().when().
method("MyBean", "matches").
to("Q").
end().
multicast("B", "C", "D");
Pipeline Routing
21
from("file:///tmp/myFile.txt").
choice().when().
method("MyBean", "matches").
to("Q").
end().
pipeline("B", "C", "D");
Camel Components
22
>  70+ components supported
What is Project Fuji? 
> Basis for OpenESB v3
> Fuji Goals
• Agility + Flexibility + Ease of Use = Productivity 
> Service Platform to realize
• Service Oriented Architecture (SOA)
• Light weight SOA (aka Web Oriented Architecture)
• Event Driven Architecture (EDA)
• ... last but not least MOM style applications 
> > 40 Components in OpenESB community today
http://fuji.dev.java.net/
23
Interesting Properties of Fuji 
• Convention, Configuration, Code... in that order
• Light weight, OSGi based
• Not JMS centric but Service Centric
• In-VM service composition option
• Choice of transport when going across VMs
• E.g. load balancing via http or federating using JXTA
• Visual and textual (DSL) editing for EIPs
• Camel component is another option 
24
Web Tooling Option
Service Composition with EIPs in a Browser
25
Web UI Gives the User...
• All-in-one interface for service composition
• Service Definition
• Routing, EIPs
• Configuration
• Deployment
• Layered on textual representation (DSL)
• Check out from version control, edit in IDE
• Tooling option for different preferences and skills
• e.g. casual technologist vs, Developer
• Extensible
26
Composition in an IDE / Text Editor
A textual representation of EIPs
> Goals
• Simple, concise syntax
• Easy to type and read
• Top-down design
• Generate service templates 
• Concept
• used to declare and configure services, routing
• Sets up services and routing at deployment time;
NOT interpreted on the fly at runtime
"Hello World 1" - 
simple routing
27
Basic Concepts of the DSL
Integration Flow Language
"Hello World 2" - 
pipes-and-filters
Output of one filter/stage flows to input of next
stage similar to Unix Pipes
28
Basic Concepts of the DSL
Explicit EIP Constructs
"Hello World 3" - 
adding EIP constructs
29
Example Pattern Implementations 
30
Message Routing: Content-Based Router
31
RouteBuilder builder = new RouteBuilder() {
    public void configure() {
      from("activemq:NewOrders").
      choice().
          when(header("product").
              isEqualTo("widget")).
              to("http://remotehost:8888/someApp/").
              to("activemq:Orders.Widgets").
          when(header("product").
              isEqualTo("gadget")).
              to("ftp://bsnyder@remotehost/private/reports/").
              to("activemq:Orders.Gadgets").
          otherwise().
              to("activemq:ERRORS");
        }
    };
}
Apache Camel Java DSL
Message Routing: Content-Based Router
32
<route>
<from uri="activemq:NewOrders"/>
<choice>
<when>
<xpath>/order/product = 'widget'</xpath>
<to uri="activemq:Orders.Widgets"/>
</when>
<when>
<xpath>/order/product = 'gadget'</xpath>
<to uri="activemq:Orders.Gadgets"/>
</when>
<otherwise>
<to uri="activemq:ERRORS"/>
</otherwise>
</choice>
</route>
Apache Camel Spring DSL
Message Channels: Dead Letter Channel 
33
RouteBuilder builder = new RouteBuilder() {
    public void configure() {
        errorHandler(deadLetterChannel("activemq:ERRORS.QUEUE"));
        from("file:///tmp/MyFile.txt?delay=2000").
        to("activemq:TEST.Q");
        }
    };
}
Apache Camel Java DSL
Message Channels: Dead Letter Channel 
34
<bean id="errorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder"
  p:deadLetterUri="smtp://mail.springsource.com:25" />
<camelContext id="camel" errorHandlerRef="errorHandler" 
  xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="seda:a" />
    <to uri="seda:b" />
  </route>
</camelContext>
Apache Camel Spring DSL
Message Transformation: Content Filter
35
RouteBuilder builder = new RouteBuilder() {
    public void configure() {
        from("activemq:THIS.QUEUE").
            process(new Processor() {
                public void process(Exchange e) {
                    Message in = exchange.getIn();
                    in.setBody(in.getBody(String.class) + " Ride the Camel!");
                }
            }).
        to("activemq:THAT.QUEUE");
        }
    };
}
Apache Camel Java DSL
Message Transformation: Content Filter
36
<bean id="transformerBean" class="com.mycompany.orders.transform.MyTransformerBean" />
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
  <from uri="activemq:THIS.QUEUE" />
  <bean ref="transformerBean" method="transformMessage" />
  <to uri="activemq:THAT.QUEUE" />
</camelContext>
Apache Camel Spring DSL
Camel Pattern: Throttler
> Limit the number of messages to be sent in a given
time window
> (only send three messages every 10 seconds)
37
public class MyRouteBuilder extends RouteBuilder {
    public void configure() {
      from("activemq:TEST.QUEUE”).
        throttler(3).timePeriodMillis(10000).
        to("http://remotehost:8888/meticProcessingService");
    }
}
Apache Camel Java DSL
Camel Pattern: Delayer
> Impose a simple delay on messages before being
sent along 
> (delay messages for a duration of JMSTimestamp
value plus three seconds)
38
public class MyRouteBuilder extends RouteBuilder {
    public void configure() {
      from("activemq:TEST.QUEUE").
        delayer(header("JMSTimestamp", 3000).
        to("http://remotehost:8888/meticProcessingService");
    }
}
Apache Camel Java DSL
Message Routing: Scatter-Gather ("all")
Fuji - DSL and Web UI
39
Message Routing: Scatter-Gather ("best")
Fuji - DSL and Web UI
40
Message Routing: Content-Based Router
Fuji - DSL and Web UI
41
Message Routing: Content-Based Router (dynamic)
• CBR rules configured at deployment/runtime
Fuji - DSL and Web UI
42
Message Routing: Composed Message Processor
Fuji - DSL and Web UI
43
EIP Product Demo 
• Apache Camel
• Project Fuji
44
Andreas Egloff
andreas.egloff@sun.com
Bruce Snyder
bruce.snyder@springsource.com

More Related Content

PDF
Using Enterprise Integration Patterns as Your Camel Jockey
PDF
Cooking with Apache Camel: Tips and Tricks - DevNation 2014
PDF
Get Cooking with Apache Camel
PDF
Spring 4 Web App
KEY
MVC on the server and on the client
PDF
Java Web Programming [2/9] : Servlet Basic
PDF
Apache Aries Overview
PDF
JavaCro'14 - Unit testing in AngularJS – Slaven Tomac
Using Enterprise Integration Patterns as Your Camel Jockey
Cooking with Apache Camel: Tips and Tricks - DevNation 2014
Get Cooking with Apache Camel
Spring 4 Web App
MVC on the server and on the client
Java Web Programming [2/9] : Servlet Basic
Apache Aries Overview
JavaCro'14 - Unit testing in AngularJS – Slaven Tomac

What's hot (20)

PPTX
PDF
Faster & Greater Messaging System HornetQ zzz
PDF
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
PDF
Lecture 7 Web Services JAX-WS & JAX-RS
ODP
Interoperable Web Services with JAX-WS and WSIT
PDF
Modular JavaScript with CommonJS Compiler
ODP
Interoperable Web Services with JAX-WS
PDF
Java Web Programming [8/9] : JSF and AJAX
PDF
Camel and JBoss
PDF
J2EE jsp_01
KEY
Multi Client Development with Spring
PPTX
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level
PDF
«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear
PDF
PPT
Using Java to implement SOAP Web Services: JAX-WS
PPTX
Petro Gordiievych "From Java 9 to Java 12"
PPTX
Mule esb :Data Weave
PPTX
Mule jdbc
PPTX
java Servlet technology
PPTX
Connection Pooling
Faster & Greater Messaging System HornetQ zzz
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
Lecture 7 Web Services JAX-WS & JAX-RS
Interoperable Web Services with JAX-WS and WSIT
Modular JavaScript with CommonJS Compiler
Interoperable Web Services with JAX-WS
Java Web Programming [8/9] : JSF and AJAX
Camel and JBoss
J2EE jsp_01
Multi Client Development with Spring
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level
«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear
Using Java to implement SOAP Web Services: JAX-WS
Petro Gordiievych "From Java 9 to Java 12"
Mule esb :Data Weave
Mule jdbc
java Servlet technology
Connection Pooling
Ad

Similar to EIP In Practice (20)

PDF
TS 4839 - Enterprise Integration Patterns in Practice
ODP
Red Hat Open Day JBoss Fuse
PPTX
Integrating Microservices with Apache Camel
PDF
Service-Oriented Integration With Apache ServiceMix
PPTX
Real world #microservices with Apache Camel, Fabric8, and OpenShift
PPTX
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
PPTX
Microservices with Apache Camel, Docker and Fabric8 v2
PPT
An introduction to Apache Camel
PPTX
Enterprise Integration Patterns and Apache Camel
PPTX
Hazelcast and MongoDB at Cloud CMS
PPTX
Bluemix paas 기반 saas 개발 사례
PPTX
Exploring Twitter's Finagle technology stack for microservices
PPTX
Apache Camel interview Questions and Answers
PPT
Messaging - RabbitMQ, Azure (Service Bus), Docker and Azure Functions
PDF
Managing your camels in the cloud with CI/CD
ODP
01 apache camel-intro
PDF
Red Hat Agile integration Workshop Labs
PPT
Mule and web services
PPTX
Splunk Conf 2014 - Getting the message
PPTX
Apache Camel framework Presentation and selection of apache camel for various...
TS 4839 - Enterprise Integration Patterns in Practice
Red Hat Open Day JBoss Fuse
Integrating Microservices with Apache Camel
Service-Oriented Integration With Apache ServiceMix
Real world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
Microservices with Apache Camel, Docker and Fabric8 v2
An introduction to Apache Camel
Enterprise Integration Patterns and Apache Camel
Hazelcast and MongoDB at Cloud CMS
Bluemix paas 기반 saas 개발 사례
Exploring Twitter's Finagle technology stack for microservices
Apache Camel interview Questions and Answers
Messaging - RabbitMQ, Azure (Service Bus), Docker and Azure Functions
Managing your camels in the cloud with CI/CD
01 apache camel-intro
Red Hat Agile integration Workshop Labs
Mule and web services
Splunk Conf 2014 - Getting the message
Apache Camel framework Presentation and selection of apache camel for various...
Ad

More from Bruce Snyder (13)

PDF
Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
PDF
Enterprise Messaging With Spring JMS
PDF
Styles of Applicaton Integration Using Spring
PDF
ActiveMQ In Action
PDF
ActiveMQ In Action - ApacheCon 2011
PDF
Apache ActiveMQ and Apache ServiceMix
PDF
Messaging With Apache ActiveMQ
PDF
Enterprise Messaging With ActiveMQ and Spring JMS
PDF
Taking Apache Camel For a Ride
PDF
Service Oriented Integration With ServiceMix
PDF
Taking Apache Camel For A Ride
PDF
Messaging With ActiveMQ
PDF
Taking Apache Camel For A Ride
Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
Enterprise Messaging With Spring JMS
Styles of Applicaton Integration Using Spring
ActiveMQ In Action
ActiveMQ In Action - ApacheCon 2011
Apache ActiveMQ and Apache ServiceMix
Messaging With Apache ActiveMQ
Enterprise Messaging With ActiveMQ and Spring JMS
Taking Apache Camel For a Ride
Service Oriented Integration With ServiceMix
Taking Apache Camel For A Ride
Messaging With ActiveMQ
Taking Apache Camel For A Ride

Recently uploaded (20)

PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
cuic standard and advanced reporting.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Approach and Philosophy of On baking technology
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Modernizing your data center with Dell and AMD
PDF
Machine learning based COVID-19 study performance prediction
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Encapsulation theory and applications.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPT
Teaching material agriculture food technology
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
Encapsulation_ Review paper, used for researhc scholars
Review of recent advances in non-invasive hemoglobin estimation
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
cuic standard and advanced reporting.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Digital-Transformation-Roadmap-for-Companies.pptx
Approach and Philosophy of On baking technology
Dropbox Q2 2025 Financial Results & Investor Presentation
Modernizing your data center with Dell and AMD
Machine learning based COVID-19 study performance prediction
Unlocking AI with Model Context Protocol (MCP)
Encapsulation theory and applications.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Teaching material agriculture food technology
NewMind AI Weekly Chronicles - August'25 Week I
Advanced methodologies resolving dimensionality complications for autism neur...

EIP In Practice

  • 1. Enterprise Integration Patterns in Practice Andreas Egloff Sun Microsystems Bruce Snyder SpringSource &
  • 2. What Are Design Patterns?  A design pattern is a formal way of documenting a solution to a design problem in a particular field of expertise. (Wikipedia) 2
  • 4. Core Principles of EIP > Patterns using asynchronous messaging as a style of integration > Pros • Scaling • Decoupling > Cons • Latency vs. throughput • Decoupling not always appropriate 4
  • 7. Layers of Functionality > Not an either/or choice, combine layers as appropriate 7
  • 8. Message Flow / Service Composition > Strengths and uses • De-coupling and re-using Services • Easier to evolve • Scaling, Throughput • Asynchronous nature • Message routing, processing, transformation • Easy to mediate 8
  • 9. Message Endpoints / Services > Message Endpoints / Services • Message based interface • Expose coarse grained services • Typically stateless • Anticipate re-use • Visibility scope examples • Within application • Within ESB • Anyone with access to JMS server • External 9
  • 10. Code Composition > Strengths and uses • Fine grained API access • Stateful, fine grained interactions • Low latency > Challenge • Interface tighter coupled 10
  • 11. Implicit and Explicit Patterns > Some patterns inherent in technology / framework • Not every pattern a "keyword" • e.g. JMS publish/subscribe ... > Patterns realized in user code  • e.g. Scatter-Gather realized in Java > Platform has pre-built constructs • e.g. Unix pipe symbol "|" : pipes-and-filters   • Route in Camel or Fuji: pipes-and-filters 11
  • 12. Visualizing EIPs • Stencils exist for Visio and OmniGraffle  • http://www.eaipatterns.com/downloads.html   12
  • 14. > Issue: Too little explicit support out-of-the-box • Too much roll your own > Issue: Explicit support out-of-the-box is too rigid • Does not exactly fit the use case • Forced to work around or again roll your own > What you want is out-of-the-box productivity with explicit constructs AND flexibility to customize the constructs Gotcha - Flexibility vs. Productivity 14
  • 15. Intro to Frameworks  • Apache Camel • http://camel.apache.org/ • Project Fuji / OpenESB v3 • http://fuji.dev.java.net/ 15
  • 16. What is Apache Camel?  A framework for simplifying integration through the use of the  Enterprise Integration Patterns for message mediation, processing, routing and transformation http://camel.apache.org/ 16
  • 17. Apache Camel is Focused on EIP 17 http://camel.apache.org/ => http://eaipatterns.com/
  • 19. Slightly More Complex Routing 19 from("file:///tmp/myFile.txt"). to("bean:MyBean?method=handleMessage"). to("jms:TEST.Q");
  • 22. Camel Components 22 >  70+ components supported
  • 23. What is Project Fuji?  > Basis for OpenESB v3 > Fuji Goals • Agility + Flexibility + Ease of Use = Productivity  > Service Platform to realize • Service Oriented Architecture (SOA) • Light weight SOA (aka Web Oriented Architecture) • Event Driven Architecture (EDA) • ... last but not least MOM style applications  > > 40 Components in OpenESB community today http://fuji.dev.java.net/ 23
  • 24. Interesting Properties of Fuji  • Convention, Configuration, Code... in that order • Light weight, OSGi based • Not JMS centric but Service Centric • In-VM service composition option • Choice of transport when going across VMs • E.g. load balancing via http or federating using JXTA • Visual and textual (DSL) editing for EIPs • Camel component is another option  24
  • 25. Web Tooling Option Service Composition with EIPs in a Browser 25
  • 26. Web UI Gives the User... • All-in-one interface for service composition • Service Definition • Routing, EIPs • Configuration • Deployment • Layered on textual representation (DSL) • Check out from version control, edit in IDE • Tooling option for different preferences and skills • e.g. casual technologist vs, Developer • Extensible 26
  • 27. Composition in an IDE / Text Editor A textual representation of EIPs > Goals • Simple, concise syntax • Easy to type and read • Top-down design • Generate service templates  • Concept • used to declare and configure services, routing • Sets up services and routing at deployment time; NOT interpreted on the fly at runtime "Hello World 1" -  simple routing 27
  • 28. Basic Concepts of the DSL Integration Flow Language "Hello World 2" -  pipes-and-filters Output of one filter/stage flows to input of next stage similar to Unix Pipes 28
  • 29. Basic Concepts of the DSL Explicit EIP Constructs "Hello World 3" -  adding EIP constructs 29
  • 31. Message Routing: Content-Based Router 31 RouteBuilder builder = new RouteBuilder() {     public void configure() {       from("activemq:NewOrders").       choice().           when(header("product").               isEqualTo("widget")).               to("http://remotehost:8888/someApp/").               to("activemq:Orders.Widgets").           when(header("product").               isEqualTo("gadget")).               to("ftp://bsnyder@remotehost/private/reports/").               to("activemq:Orders.Gadgets").           otherwise().               to("activemq:ERRORS");         }     }; } Apache Camel Java DSL
  • 32. Message Routing: Content-Based Router 32 <route> <from uri="activemq:NewOrders"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:Orders.Widgets"/> </when> <when> <xpath>/order/product = 'gadget'</xpath> <to uri="activemq:Orders.Gadgets"/> </when> <otherwise> <to uri="activemq:ERRORS"/> </otherwise> </choice> </route> Apache Camel Spring DSL
  • 33. Message Channels: Dead Letter Channel  33 RouteBuilder builder = new RouteBuilder() {     public void configure() {         errorHandler(deadLetterChannel("activemq:ERRORS.QUEUE"));         from("file:///tmp/MyFile.txt?delay=2000").         to("activemq:TEST.Q");         }     }; } Apache Camel Java DSL
  • 34. Message Channels: Dead Letter Channel  34 <bean id="errorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder"   p:deadLetterUri="smtp://mail.springsource.com:25" /> <camelContext id="camel" errorHandlerRef="errorHandler"    xmlns="http://camel.apache.org/schema/spring">   <route>     <from uri="seda:a" />     <to uri="seda:b" />   </route> </camelContext> Apache Camel Spring DSL
  • 35. Message Transformation: Content Filter 35 RouteBuilder builder = new RouteBuilder() {     public void configure() {         from("activemq:THIS.QUEUE").             process(new Processor() {                 public void process(Exchange e) {                     Message in = exchange.getIn();                     in.setBody(in.getBody(String.class) + " Ride the Camel!");                 }             }).         to("activemq:THAT.QUEUE");         }     }; } Apache Camel Java DSL
  • 36. Message Transformation: Content Filter 36 <bean id="transformerBean" class="com.mycompany.orders.transform.MyTransformerBean" /> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">   <from uri="activemq:THIS.QUEUE" />   <bean ref="transformerBean" method="transformMessage" />   <to uri="activemq:THAT.QUEUE" /> </camelContext> Apache Camel Spring DSL
  • 37. Camel Pattern: Throttler > Limit the number of messages to be sent in a given time window > (only send three messages every 10 seconds) 37 public class MyRouteBuilder extends RouteBuilder {     public void configure() {       from("activemq:TEST.QUEUE”).         throttler(3).timePeriodMillis(10000).         to("http://remotehost:8888/meticProcessingService");     } } Apache Camel Java DSL
  • 38. Camel Pattern: Delayer > Impose a simple delay on messages before being sent along  > (delay messages for a duration of JMSTimestamp value plus three seconds) 38 public class MyRouteBuilder extends RouteBuilder {     public void configure() {       from("activemq:TEST.QUEUE").         delayer(header("JMSTimestamp", 3000).         to("http://remotehost:8888/meticProcessingService");     } } Apache Camel Java DSL
  • 42. Message Routing: Content-Based Router (dynamic) • CBR rules configured at deployment/runtime Fuji - DSL and Web UI 42
  • 43. Message Routing: Composed Message Processor Fuji - DSL and Web UI 43
  • 44. EIP Product Demo  • Apache Camel • Project Fuji 44