taking apache camel for a ride - software summit

69
Taking Apache Camel For a Ride Bruce Snyder [email protected] October 2008 Keystone, Colorado Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element Bruce Snyder — Taking Apache Camel for a Ride Slide 1

Upload: others

Post on 03-Feb-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Taking Apache Camel For a Ride - Software Summit

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

Page 2: Taking Apache Camel For a Ride - Software Summit

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

Page 3: Taking Apache Camel For a Ride - Software Summit

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 3

Page 4: Taking Apache Camel For a Ride - Software Summit

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

Page 5: Taking Apache Camel For a Ride - Software Summit

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

Page 6: Taking Apache Camel For a Ride - Software Summit

Integration is Messy!

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 6

Page 7: Taking Apache Camel For a Ride - Software Summit

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 7

Page 8: Taking Apache Camel For a Ride - Software Summit

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

Page 9: Taking Apache Camel For a Ride - Software Summit

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 9

Page 10: Taking Apache Camel For a Ride - Software Summit

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

Page 11: Taking Apache Camel For a Ride - Software Summit

Too Many Choices!

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 11

Page 12: Taking Apache Camel For a Ride - Software Summit

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

Page 13: Taking Apache Camel For a Ride - Software Summit

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

Page 14: Taking Apache Camel For a Ride - Software Summit

Message Routing

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 14

Page 15: Taking Apache Camel For a Ride - Software Summit

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 15

Page 16: Taking Apache Camel For a Ride - Software Summit

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

Page 17: Taking Apache Camel For a Ride - Software Summit

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

Page 18: Taking Apache Camel For a Ride - Software Summit

Camel Components

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 18

Page 19: Taking Apache Camel For a Ride - Software Summit

Simple Routing

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 19

Page 20: Taking Apache Camel For a Ride - Software Summit

More Simple Routing

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 20

Page 21: Taking Apache Camel For a Ride - Software Summit

Pipeline Routing

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 21

Page 22: Taking Apache Camel For a Ride - Software Summit

Multicast Routing

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 22

Page 23: Taking Apache Camel For a Ride - Software Summit

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

Page 24: Taking Apache Camel For a Ride - Software Summit

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

Page 25: Taking Apache Camel For a Ride - Software Summit

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

Page 26: Taking Apache Camel For a Ride - Software Summit

Pattern

Examples

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 26

Page 27: Taking Apache Camel For a Ride - Software Summit

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 27

Page 28: Taking Apache Camel For a Ride - Software Summit

Content Based Router

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 28

Page 29: Taking Apache Camel For a Ride - Software Summit

<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

Page 30: Taking Apache Camel For a Ride - Software Summit

Message Filter

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 30

Page 31: Taking Apache Camel For a Ride - Software Summit

Message Filter

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 31

Page 32: Taking Apache Camel For a Ride - Software Summit

Splitter

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 32

Page 33: Taking Apache Camel For a Ride - Software Summit

Splitter Using XQuery

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 33

Page 34: Taking Apache Camel For a Ride - Software Summit

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

Page 35: Taking Apache Camel For a Ride - Software Summit

Message Translator

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 35

Page 36: Taking Apache Camel For a Ride - Software Summit

Resequencer

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 36

Page 37: Taking Apache Camel For a Ride - Software Summit

Routing Slip

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 37

Page 38: Taking Apache Camel For a Ride - Software Summit

Throttler

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 38

Page 39: Taking Apache Camel For a Ride - Software Summit

Delayer

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 39

Page 40: Taking Apache Camel For a Ride - Software Summit

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

Page 41: Taking Apache Camel For a Ride - Software Summit

Multicast

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 41

Page 42: Taking Apache Camel For a Ride - Software Summit

Demo

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 42

Page 43: Taking Apache Camel For a Ride - Software Summit

More

Patterns

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 43

Page 44: Taking Apache Camel For a Ride - Software Summit

Wire Tap

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 44

Page 45: Taking Apache Camel For a Ride - Software Summit

Content Enricher

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 45

Page 46: Taking Apache Camel For a Ride - Software Summit

More Content Enricher

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 46

Page 47: Taking Apache Camel For a Ride - Software Summit

Content Filter

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 47

Page 48: Taking Apache Camel For a Ride - Software Summit

Combine Patterns

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 48

Page 49: Taking Apache Camel For a Ride - Software Summit

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

Page 50: Taking Apache Camel For a Ride - Software Summit

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

Page 51: Taking Apache Camel For a Ride - Software Summit

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

Page 52: Taking Apache Camel For a Ride - Software Summit

Beans

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 52

Page 53: Taking Apache Camel For a Ride - Software Summit

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

Page 54: Taking Apache Camel For a Ride - Software Summit

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

Page 55: Taking Apache Camel For a Ride - Software Summit

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

Page 56: Taking Apache Camel For a Ride - Software Summit

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

Page 57: Taking Apache Camel For a Ride - Software Summit

Binding Method Arguments

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 57

Page 58: Taking Apache Camel For a Ride - Software Summit

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

Page 59: Taking Apache Camel For a Ride - Software Summit

Type Conversion

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 59

Page 60: Taking Apache Camel For a Ride - Software Summit

Type Conversion

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 60

Page 61: Taking Apache Camel For a Ride - Software Summit

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

Page 62: Taking Apache Camel For a Ride - Software Summit

Message Mapper

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 62

Page 63: Taking Apache Camel For a Ride - Software Summit

Message Translator

Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Organic Element

Bruce Snyder — Taking Apache Camel for a Ride Slide 63

Page 64: Taking Apache Camel For a Ride - Software Summit

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

Page 65: Taking Apache Camel For a Ride - Software Summit

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

Page 66: Taking Apache Camel For a Ride - Software Summit

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

Page 67: Taking Apache Camel For a Ride - Software Summit

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

Page 68: Taking Apache Camel For a Ride - Software Summit

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

Page 69: Taking Apache Camel For a Ride - Software Summit

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