Taking Apache Camel For a Ride - Software Summit...Title SnyderTakingApacheCamelForARide.key Author...

Post on 04-Jun-2020

0 views 0 download

transcript

Taking Apache Camel For a RideBruce Snyderbsnyder@apache.orgOctober 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