Integration using Apache Camel and Groovy

Post on 17-May-2015

260 views 2 download

Tags:

description

Apache Camel is versatile integration library that supports a huge number of components, enterprise integration patterns, and programming languages. In this this talk I first introduce you to Apache Camel and its concepts. Then we move on to see how you can use the Groovy programming language with Camel as a first class Groovy DSL to build integration flows. You will also learn how to build a new Camel and Groovy app from scratch from a live demo. And we also touch how you can use Camel from grails using the grails-camel plugin. I will also show the web console tools that give you insight into your running Apache Camel applications, including visual route diagrams with tracing, debugging, and profiling capabilities. This session will be taught with a 50/50 mix of slides and live demos, and it will conclude with Q&A time.

Transcript of Integration using Apache Camel and Groovy

Claus IbsenRed Hat

●Integration usingApache Camel & Groovy

PUBLIC PRESENTATION | CLAUS IBSEN2

Your Speaker

● Principal Software Engineer at Red Hat

● Apache Camel● 6 years as committer

● Author of Camel in Action book

● Contact● EMail: claus.ibsen@gmail.com● Twitter: @davsclaus● Blog: http://davsclaus.com● Linkedin: http://www.linkedin.com/in/davsclaus

PUBLIC PRESENTATION | CLAUS IBSEN3

This awesome ...

PUBLIC PRESENTATION | CLAUS IBSEN4

These two awesome has ...

PUBLIC PRESENTATION | CLAUS IBSEN5

These three awesome has ...

PUBLIC PRESENTATION | CLAUS IBSEN6

These three awesome has something in common

PUBLIC PRESENTATION | CLAUS IBSEN7

Agenda

● What is Apache Camel?

● A little Example

● Riding Camel

● Creating new Camel Projects

● hawtio

● Q & A

PUBLIC PRESENTATION | CLAUS IBSEN8

Why the name Camel?

PUBLIC PRESENTATION | CLAUS IBSEN9

Why the name Camel?

Because Camel iseasy to remember and type ...

PUBLIC PRESENTATION | CLAUS IBSEN10

Why the name Camel?

… or the creator used to smoke cigarets!

http://camel.apache.org/why-the-name-camel.html

PUBLIC PRESENTATION | CLAUS IBSEN11

What is Apache Camel?

● Quote from the website

PUBLIC PRESENTATION | CLAUS IBSEN12

What is Apache Camel?

● Why do we need integration?● Critical for your business to integrate

● Why Integration Framework?● Framework do the heavy lifting● You can focus on business problem● Not "reinventing the wheel"

PUBLIC PRESENTATION | CLAUS IBSEN13

What is Apache Camel?

● What is Enterprise Integration Patterns?

It's a book

PUBLIC PRESENTATION | CLAUS IBSEN14

What is Apache Camel?

● Enterprise Integration Patterns

http://camel.apache.org/eip

PUBLIC PRESENTATION | CLAUS IBSEN15

What is Apache Camel?

● EIP - Content Based Router

PUBLIC PRESENTATION | CLAUS IBSEN16

What is Apache Camel?

from newOrder

PUBLIC PRESENTATION | CLAUS IBSEN17

What is Apache Camel?

from newOrder choice

PUBLIC PRESENTATION | CLAUS IBSEN18

What is Apache Camel?

from newOrder choice when isWidget to widget

PUBLIC PRESENTATION | CLAUS IBSEN19

What is Apache Camel?

from newOrder choice when isWidget to widget otherwise to gadget

PUBLIC PRESENTATION | CLAUS IBSEN20

What is Apache Camel?

from(newOrder) choice when(isWidget) to(widget) otherwise to(gadget)

PUBLIC PRESENTATION | CLAUS IBSEN21

What is Apache Camel?

from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);

PUBLIC PRESENTATION | CLAUS IBSEN22

What is Apache Camel?

from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);Ups S

orry ...

This is

a gr8conf

so le

ts get G

roovy :)

PUBLIC PRESENTATION | CLAUS IBSEN23

What is Apache Camel?

from newOrder choice when isWidget to widget otherwise to gadget

PUBLIC PRESENTATION | CLAUS IBSEN24

What is Apache Camel?

from newOrder choice when isWidget to widget otherwise to gadgetUnfortu

nately the C

amel

Groovy D

SL is not a

s

awesome …

yet

PUBLIC PRESENTATION | CLAUS IBSEN25

What is Apache Camel?

from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget)

We removed that last semi colon ;)

PUBLIC PRESENTATION | CLAUS IBSEN26

What is Apache Camel?

Endpoint newOrder = endpoint("activemq:queue:newOrder");

from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);

PUBLIC PRESENTATION | CLAUS IBSEN27

What is Apache Camel?

Endpoint newOrder = endpoint("activemq:queue:newOrder");Predicate isWidget = xpath("/order/product = 'widget'");

from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);

PUBLIC PRESENTATION | CLAUS IBSEN28

What is Apache Camel?

Endpoint newOrder = endpoint("activemq:queue:newOrder");Predicate isWidget = xpath("/order/product = 'widget'");Endpoint widget = endpoint("activemq:queue:widget");Endpoint gadget = endpoint("activemq:queue:gadget");

from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);

PUBLIC PRESENTATION | CLAUS IBSEN29

What is Apache Camel?

● Java Code

public void configure() throws Exception { Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget");

from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget) .end(); }

PUBLIC PRESENTATION | CLAUS IBSEN30

What is Apache Camel?

● Java Codeimport org.apache.camel.Endpoint;import org.apache.camel.Predicate;import org.apache.camel.builder.RouteBuilder;

public class MyRoute extends RouteBuilder {

public void configure() throws Exception { Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget");

from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget) .end(); }}

PUBLIC PRESENTATION | CLAUS IBSEN31

What is Apache Camel?

● Camel Java DSL

import org.apache.camel.builder.RouteBuilder;

public class MyRoute extends RouteBuilder {

public void configure() throws Exception { from("activemq:queue:newOrder") .choice() .when(xpath("/order/product = 'widget'")) .to("activemq:queue:widget") .otherwise() .to("activemq:queue:gadget") .end(); }}

PUBLIC PRESENTATION | CLAUS IBSEN32

What is Apache Camel?

● Camel XML DSL

<route> <from uri="activemq:queue:newOrder"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route>

PUBLIC PRESENTATION | CLAUS IBSEN33

What is Apache Camel?

● Endpoint as URIs

<route> <from uri="file:inbox/orders"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route>

use file instead

PUBLIC PRESENTATION | CLAUS IBSEN34

What is Apache Camel?

● Endpoint as URIs

<route> <from uri="file:inbox/orders?delete=true"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route>

parameters

PUBLIC PRESENTATION | CLAUS IBSEN35

Standard Java, XML, or Groovy

● Java DSL is just Java

PUBLIC PRESENTATION | CLAUS IBSEN36

Standard Java, XML, or Groovy

● XML DSL is just XML

● … with XSD schema for validation/tooling

PUBLIC PRESENTATION | CLAUS IBSEN37

Standard Java, XML, or Groovy

● Groovy DSL is just Groovy

GroovyClosure

PUBLIC PRESENTATION | CLAUS IBSEN38

What is Apache Camel?

● Camel's Architecture

PUBLIC PRESENTATION | CLAUS IBSEN39

What is Apache Camel?

150+ Components

PUBLIC PRESENTATION | CLAUS IBSEN40

What is Apache Camel?

150+ Components

PUBLIC PRESENTATION | CLAUS IBSEN41

What is Apache Camel?

● Summary● Integration Framework● Enterprise Integration Patterns (EIP)● Routing (using DSL)● Easy Configuration (endpoint as uri's)● Just Java, XML, or Groovy code● No Container Dependency● A lot of components

PUBLIC PRESENTATION | CLAUS IBSEN42

Agenda

● What is Apache Camel?

● A little Example

● Riding Camel

● Creating new Camel Projects

● hawtio

● Q & A

PUBLIC PRESENTATION | CLAUS IBSEN43

A Little Example

● File Copier Example

PUBLIC PRESENTATION | CLAUS IBSEN44

A Little Example

● File Copier Example

PUBLIC PRESENTATION | CLAUS IBSEN45

A Little Example

● File Copier Example

PUBLIC PRESENTATION | CLAUS IBSEN46

A Little Example

● File Copier Example

PUBLIC PRESENTATION | CLAUS IBSEN47

A Little Example

● File Copier Example

PUBLIC PRESENTATION | CLAUS IBSEN48

A Little Groovy Example

PUBLIC PRESENTATION | CLAUS IBSEN49

A Little Groovy Example (all source)

PUBLIC PRESENTATION | CLAUS IBSEN50

A Little Groovy Example

● Run the example● groovy mycamel.groovy

PUBLIC PRESENTATION | CLAUS IBSEN51

Agenda

● What is Apache Camel?

● A little Example

● Riding Camel

● Creating new Camel Projects

● hawtio

● Q & A

PUBLIC PRESENTATION | CLAUS IBSEN52

Riding Camel

● Downloading Apache Camel● zip/tarball (approx 8mb)

http://camel.apache.org

PUBLIC PRESENTATION | CLAUS IBSEN53

Riding Camel

● Using Command Shell● Requires: Apache Maven

● From Eclipse

PUBLIC PRESENTATION | CLAUS IBSEN54

Riding Camel

● Console Example

● cd examples/camel-example-console

● mvn compile exec:java

PUBLIC PRESENTATION | CLAUS IBSEN55

Riding Camel

● Twitter Example

● cd examples/camel-example-twitter-websocket

● mvn compile exec:java http://localhost:9090/index.html

PUBLIC PRESENTATION | CLAUS IBSEN56

Riding Camel

● More examples ...

... and further details at website.

http://camel.apache.org/examples

PUBLIC PRESENTATION | CLAUS IBSEN57

Agenda

● What is Apache Camel?

● A little Example

● Riding Camel

● Creating new Camel Projects

● hawtio

● Q & A

PUBLIC PRESENTATION | CLAUS IBSEN58

Creating new Camel Projects

● Using Command Shell

● .. or from Eclipse

PUBLIC PRESENTATION | CLAUS IBSEN59

Creating new Camel Projects

● Importing into Eclipse

Existing Maven Project

PUBLIC PRESENTATION | CLAUS IBSEN60

Creating new Camel Projects

● Maven Archetypes

camel-archetype-activemq camel-archetype-java

camel-archetype-blueprint camel-archetype-scala

camel-archetype-component camel-archetype-spring

camel-archetype-dataformat camel-archetype-spring-dm

camel-archetype-groovy camel-archetype-web

PUBLIC PRESENTATION | CLAUS IBSEN61

Creating new Camel Projects

● camel-archetype-groovy

mvn installmvn exec:java

PUBLIC PRESENTATION | CLAUS IBSEN62

Creating new Camel Projects

● camel-archetype-spring

mvn installmvn camel:run

mvn io.hawt:hawtio-maven-plugin:1.4.2:spring

PUBLIC PRESENTATION | CLAUS IBSEN63

Agenda

● What is Apache Camel?

● A little Example

● Riding Camel

● Creating new Camel Projects

● hawtio

● Q & A

PUBLIC PRESENTATION | CLAUS IBSEN64

hawtio

● What does it do? ...

PUBLIC PRESENTATION | CLAUS IBSEN65

hawtio

● Yet another awesome project created by this guy ...

PUBLIC PRESENTATION | CLAUS IBSEN66

hawtio

Tooling – Web Console - hawtio

http://hawt.io

PUBLIC PRESENTATION | CLAUS IBSEN67

hawtio

● What does it dofor Apache Camel?

PUBLIC PRESENTATION | CLAUS IBSEN68

hawtio

● Technology Stack● HTML5 single page app● TypeScript → JavaScript● Angular JS● Bootstrap CSS● HTTP/REST ↔ backend● Jolokia on backend for JMX over REST● Plugins expose services as JMX or REST

http://hawt.io/plugins/howPluginsWork.html

PUBLIC PRESENTATION | CLAUS IBSEN69

Apache Camel & hawtio

PUBLIC PRESENTATION | CLAUS IBSEN70

Agenda

● What is Apache Camel?

● A little Example

● Riding Camel

● Creating new Camel Projects

● hawtio

● Q & A

PUBLIC PRESENTATION | CLAUS IBSEN71

These three awesome has something in common

PUBLIC PRESENTATION | CLAUS IBSEN72

These three awesome has something in common

PUBLIC PRESENTATION | CLAUS IBSEN73

What about a 4th awesome project?

PUBLIC PRESENTATION | CLAUS IBSEN74

Any Questions ?

● Contact● EMail: cibsen@redhat.com / claus.ibsen@gmail.com ● Twitter: @davsclaus● Blog: http://davsclaus.com● Linkedin: http://www.linkedin.com/in/davsclaus