Solving Enterprise Integration with Apache Camel

Preview:

DESCRIPTION

Talk given at Phoenix Desert Code Camp on enterprise integration, enterprise service bus, and Apache Camel

Citation preview

1 1

Solving Enterprise Integration With

Apache Camel

Christian Posta Principal Consultant and Architect 11/09/13

2

•  What is Integration?

•  What is Apache Camel

•  Why Apache Camel?

•  Example

•  Questions?

Agenda

3

Your speaker Christian Posta Blog: http://christianposta.com/blog

Twitter: @christianposta

Email: christian@redhat.com

ceposta@apache.org

•  Principal Consultant and Architect at Red Hat (FuseSource)

•  Based in Phoenix, AZ

•  Committer on Apache Camel, ActiveMQ, Apollo

•  PMC on ActiveMQ

•  Author: Essential Camel Components DZone Refcard

4 4

What is Integration?

5

Integration?

6

Integration…

7

Just use one computer.

No integration needed.

8

•  Off the shelf? Home Grown? Acquisition? •  Platforms •  Protocols / Data Formats •  Data Formats •  Timing •  Organizational mismatch

Why is integration hard?

9

Commercial Solutions?

10

Enterprise Service Bus?

11

Enterprise Service Bus…

12

•  Protocol mediation •  Routing •  Transformation •  EIPs •  Start small, build up •  Open Source •  Community driven

Extract the heart of ESB

13

•  Common language!!!!! •  Specific context •  Forces at work •  Concrete solution •  Guidance •  Other patterns… •  65 patterns

Patterns FTW!

14 14

What is Apache Camel?

15

Proud parents of Camel

16

Apache Camel Apache Camel is an open-source,

light-weight, integration library.

Use Camel to integrate disparate systems that speak different protocols and data formats

17

•  Can carry more weight that other beasts?

•  James fancied the cigarettes? •  A horse designed by committee?

Why the name Camel?

Concise Application Messaging Exchange Language

18

•  Light-weight integration library •  Enterprise Integration Patterns •  Components •  Domain Specific Language •  Routing and Mediation (like an ESB?) •  Runs in any container (or stand alone)

What is Apache Camel?

19

•  An integration library •  Routing (content-based, dynamic, rules-engine…) •  Mediation (xformations, protocols, wire transports…) •  DSL

•  Can build an ESB (real ESB.. Not just box in the middle)

•  Many options based on Camel! •  Fuse ESB / JBoss Fuse •  Apache ServiceMix (Karaf + Camel) •  Talend, wso2, others… •  Not tied to vendor lock-in and commercial licenses!

Not an ESB…per-se…

20 20

Quick Example

21

Quick Example

File System Message Oriented Middleware

22

Quick Example

From A Send to B Filter message

23

Quick Example

from(A) to(B) filter(predicate)

24

Quick Example

from(A) .to(B) .filter(isWidget)

25

Quick Example

isWidget = xpath(“/quote/product = ‘widget’”); from(A) .filter(isWidget). to(B)

26 26

Using Camel

27

Very popular

•  Used at top companies in finance, shipping,

retail/e-retail, health care, airline

reservations, etc

•  FAA: http://fusesource.com/collateral/131

•  Sabre: http://fusesource.com/collateral/139

•  CERN: http://fusesource.com/collateral/103

28

Open source

•  Apache Software Foundation

•  ASL v 2.0 Licensed

•  Vibrant community •  Jira, mailing list, github

•  Lots of contributions! Check out the components!

29

Pipes and Filters

•  Step by Step – “Processors” in Camel terminology •  Complex processing – “Routes” •  Flexible •  Testing •  Reuse

30

•  Defined in Java, XML, Scala, Groovy •  Step by step processing of a message:

•  Consumer – Listen for incoming message •  Zero or more “filters” or Processors •  Producer – Send outgoing message

•  Number of processing filters, or “Processors” in Camel-speak •  EIPs •  Tranform, redirect, enrich

Camel Routes

31

Domain Specific Language •  Domain specific (integration) •  Used to build and describe Camel Routes •  Embedded within a general programming language •  Java, Spring XML, Scala, Groovy •  Take advantage of existing tools •  Fluent builders (builder pattern…)

•  from(“..”).enrich(“…”).filter(“..”).to(“…”);

32

Java DSL

public class OrderProcessorRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { from(“activemq:orders”)

.choice() .when(header(“customer-rating”).isEqualTo(“gold”)) .to(“ibmmq:topic:specialCustomer”) .otherwise() .to(“ftp://user@host/orders/regularCustomers”) .end() .log(“received new order ${body.orderId}”) .to(“ibatis:storeOrder?statementType=Insert”); }}

33

Spring XML DSL

<route id=“processOrders”> <from uri=“activemq:orders”/>

<choice> <when> <simple>${header.customer-rating} == ‘gold’</simple> <to uri=“ibmmq:topic:specialCustomer”> </when>

<otherwise> <to uri=“ftp://user@host/orders/regularCustomers” /> </otherwise>

</choice> <log message=“received new order ${body.orderId}”/> <to uri=“ibatis:storeOrder?statementType=Insert”/> </route>

34

•  Message Routing •  Transformation •  Aggregation •  Splitting •  Resequencer •  Routing Slip •  Enricher •  All from the book!

Enterprise Integration Patterns

35

•  Prepackaged bits of code •  Highly configurable •  Maximum interoperability •  Used to build “Adapters” to existing systems •  Don’t reinvent the wheel and end up with a box

Components

36

Components •  ActiveMQ, Websphere, Weblogic (JMS)

•  AMQP

•  ATOM feeds

•  AWS (S3, SQS, SNS, others)

•  Bean

•  Cache (EHCache)

•  CXF (JAX-WS, JAX-RS)

•  EJB

•  Drools

•  File

•  FTP

•  Google App Engine

•  GMail

•  HTTP

•  IRC

•  jclouds

•  JDBC

•  Jetty

•  Twitter

•  MQTT

•  MyBatis

•  JPA

•  Spring Integration

•  Spring Web Services

http://camel.apache.org/components.html

To see list of all components!!

37

•  URI format: •  scheme:localPart[?options]

•  scheme: identifies the “component” •  localPart: specific to the component •  options: is a list of name-value pairs

•  Creates endpoints based on configuration •  Route endpoint “factories” •  Integrate with Camel Routes by creating producer/

consumer endpoints

Components

38

Another Example

public class MyExampleRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { from(“aws-sqs://demo?defaultVisibilityTimeout=2”) .setHeader(“type”).jsonpath(“$[‘type’]”)

.filter(simple(“${header.type} == ‘login’”) .to(“jms:quote”);

}}

39

Test Framework •  Powerful way to test your Camel routes

•  http://camel.apache.org/mock.html

•  Uses Mocks •  Mocks vs Stubs? •  http://martinfowler.com/articles/mocksArentStubs.html

•  Provides declarative testing mechanism •  Declare •  Test •  Assert

40

Management with HawtIO http://hawt.io

41

Developer Tooling Support Fuse IDE

42

JBoss Fuse (aka Fuse ESB)

43

JBoss Fuse (aka Fuse ESB)

44 44

Live Demo

can be found here: https://github.com/christian-posta/camel-sqs-example

45 45

Resources

46

Dzone Refcardz

•  Camel Essential Components •  http://refcardz.dzone.com/refcardz/essential-camel-components

•  Essential EIP with Apache Camel •  http://refcardz.dzone.com/refcardz/enterprise-integration

REFCARDZ

47

Apache Community •  http://camel.apache.org •  Mailing list: users@camel.apache.org •  Nabble Archive:

http://camel.465427.n5.nabble.com/Camel-Users-f465428.html

•  Source code: http://svn.apache.org/viewvc/camel/trunk/

•  Blogs, Articles, Examples •  http://camel.apache.org/articles.html •  http://camel.apache.org/user-stories.html

•  http://camel.apache.org/user-stories.html •  http://www.davsclaus.com •  http://www.christianposta.com/blog

48

Apache Camel Books

49

Apache Camel Books

50 50

Questions