taking apache camel for a ride - software summit
TRANSCRIPT
Taking Apache Camel For a RideBruce [email protected] 2008Keystone, Colorado
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 1
Taking Apache Camel
For a Ride
Taking Apache Camel
For a Ride
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 2
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 3
Protocol Integration is Common
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 4
Data Format Integration is Common
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 5
Integration is Messy!
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 6
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 7
SOA = Spaghetti Oriented Architecture
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 8
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 9
Options For Integration
1 2
3
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 10
Too Many Choices!
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 11
The Easiest Solution - Apache Camel
http://activemq.apache.org/camel/
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 12
Enterprise Integration Patterns
http://enterpriseintegrationpatterns.com/
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 13
Message Routing
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 14
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 15
History of Apache Camel
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 16
Camel Components
http://activemq.apache.org/camel/components.html
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 17
Camel Components
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 18
Simple Routing
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 19
More Simple Routing
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 20
Pipeline Routing
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 21
Multicast Routing
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 22
Multicast-to-Many Pipeline Routes
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 23
Language Support
BeanShellJavascriptGroovyPythonPHPRuby
JSP ELOGNLSQLXPathXQuery
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 24
Getting Started - The Camel Context
<camelContext
xmlns="http://activemq.apache.org/camel/schema/spring">
<package>com.acme.quotes</package>
</camelContext>
CamelContext context = new DefaultCamelContext();
context.addRoutes(new MyRouteBuilder());
context.start();
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 25
Pattern
Examples
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 26
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 27
Content Based Router
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 28
<camelContext
xmlns="http://activemq.apache.org/camel/schema/spring"> <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:Orders.Bad"/>
</otherwise> </choice>
</route> </camelContext>
Content Based Router
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 29
Message Filter
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 30
Message Filter
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 31
Splitter
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 32
Splitter Using XQuery
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 33
Aggregator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("activemq:Inventory.Items").
aggregator(header("symbol").isEqualTo("IBM").
to("activemq:Inventory.Order");
}
}
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 34
Message Translator
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 35
Resequencer
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 36
Routing Slip
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 37
Throttler
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 38
Delayer
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 39
Load Balancer
Policy Description
Round Robin Balance the exchange load across the available endpoints
Random Randomly choose an endpoint to send the exchange
Sticky Sticky load balancing of exchanges using an expression
Topic Send exchange to all endpoints (like a JMS topic)
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 40
Multicast
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 41
Demo
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 42
More
Patterns
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 43
Wire Tap
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 44
Content Enricher
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 45
More Content Enricher
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 46
Content Filter
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 47
Combine Patterns
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 48
Configure Error Handling
RouteBuilder builder = new RouteBuilder() {
public void configure() {
errorHandler(deadLetterChannel("file:errors"));
from("bean:foo").to("seda:b");
}
};
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 49
Configure Error Handling
RouteBuilder builder = new RouteBuilder() {
public void configure() {
from("seda:a").errorHandler(loggingErrorHandler("FOO.BAR")).
to("seda:b");
from("seda:b").to("seda:c");
}
};
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 50
Configure Exception Policies
RouteBuilder builder = new RouteBuilder() {
public void configure() { exception(IOException.class)
.initialRedeliveryDelay(5000L)
.maximumRedeliveries(3)
.maximumRedeliveryDelay(30000L)
.backOffMultiplier(1.0)
.useExponentialBackOff()
.setHeader(MESSAGE_INFO, constant("Damned IOException!"))
.to("activemq:errors");
from("seda:a").to("seda:b"); }
};
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 51
Beans
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 52
Make Context Discover Beans
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 53
Bean as a Message Translator
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 54
Bean as a Message Translator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("activemq:Incoming”).
beanRef("myBean", "someMethod").
to("activemq:Outgoing");
}
}
*With Method Name
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 55
Binding Beans to Camel Endpoints
public class Foo {
@MessageDriven(uri="activemq:cheese")
public void onCheese(String name) {
...
}
}
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 56
Binding Method Arguments
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 57
Injecting Endpoints Into Beans
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 58
Type Conversion
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 59
Type Conversion
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 60
Type ConvertorsSupport for the following types:
FileStringbyte[] and ByteBuffer InputStream and OutputStream Reader and Writer Document and Source
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 61
Message Mapper
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 62
Message Translator
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 63
Another Message Translator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("activemq:FOO.TEST”).
transform(body().append(getDynamicText())).
to("http://outgoing.com/foo");
}
}
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 64
Business Activity Monitoring (BAM)
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 65
Business Activity Monitoring (BAM)
public class MyActivities extends ProcessBuilder {
public void configure() throws Exception {
// lets define some activities, correlating on an
// XPath query of the message body ActivityBuilder purchaseOrder = activity("activemq:PurchaseOrders")
.correlate(xpath("/purchaseOrder/@id").stringResult());
ActivityBuilder invoice = activity("activemq:Invoices") .correlate(xpath("/invoice/@purchaseOrderId").stringResult());
// now lets add some BAM rules
invoice.starts().after(purchaseOrder.completes()) .expectWithin(seconds(1))
.errorIfOver(seconds(2)).to("activemq:FailedProcesses"); }
}
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 66
Complex Routing is Easier from(“http://localhost:8080/requests/”). tryBlock(). to(“activemq:queue:requests”). setOutBody(constant(“<ack/>”)). handle(Throwable.class). setFaultBody(constant(“<nack/>”));
from((“activemq:queue:requests?transacted=true”). process(requestTransformer). to(“http://host:8080/Request”). filter(xpath(“//nack”)). process(nackTransformer). to(“jdbc:store”);
from(“http://localhost:8080/responses/”). tryBlock(). to(“activemq:queue:responses”). setOutBody(constant(“<ack/>”)). handle(Throwable.class). setFaultBody(constant(“<nack/>”));
from(“activemq:queue:responses?transacted=true”). process(responseTransformer). to(“jdbc:store”);
from(“http://localhost:8080/pull/”). to(“jdbc:load”);
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 67
Finally, the Camel Truck!
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 68
Ride the Camel!
http://activemq.apache.org/camel/
Ride the Camel!
Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element
Bruce Snyder — Taking Apache Camel for a Ride Slide 69