SlideShare a Scribd company logo
1 of 77
Download to read offline
Apache Camel Essential Components

Presenter: Christian Posta
Title: Senior Consultant
Date: January 23, 2013
Agenda




What is Camel?



Camel Intro



Components



More Information



2

FuseSource/Red Hat

Q&A
FuseSource – the leading open source integration
and messaging vendor...now a part of Red Hat!


FuseSource – a company built on success


Founded in 2005



Commercial Support




Camel, ActiveMQ, ServiceMix, CXF

Enterprise Products




Production Support, Training, Consulting





Certified, hardened, based on open source
Proven track record in mission-critical apps

Acquired by Red Hat in September 2012


Two open source leaders in the market:
comprehensive middleware solutions





3

Share a maniacal focus on community
Offices in almost all time zones and over 30 countries
Same Great Products and Services – and More






FuseSource / Red Hat will continue to offer and support all
FuseSource products
Continued training, consulting, and subscriptions – more
coverage

fusesource.com transitioning to redhat.com



Community – need to re-register at redhat.com



4

JIRAS → redhat.com
fusesource.com - maintained at least through 2013
About Me


Christian Posta



Senior Consultant



Committer at Apache on ActiveMQ, Apollo



Email: christian@redhat.com
ceposta@apache.org




Twitter: @christianposta



5

Blog: http://www.christianposta.com/blog

Google+
What is Camel?

6
What isn‟t Apache Camel
• Enterprise Service Bus (ESB)
• Container
•

ServiceMix/FuseESB

•

OSGi container

•

Tomcat, JBoss, Geronimo

•

Commercial App Servers

• Proprietary, closed source

7
Integration

Use Camel to Integrate disparate systems that
talk different protocols and data formats.

8
Integrate??

• Integration is Hard!
• Different system vintages
• Mainframe, EAI Hub, MOM, EJB, Web Services
• Evolving business processes
• Systems must work together
• File exchange, Shared Database, Remote Procedure
Call (RPC), Messaging

9
Why integration is hard…
• Platforms
• Protocols
• Data Formats
• Timing
• Organizational mismatch
• Communication

Hard, but not impossible, definitely not new…

10
Patterns!
• Enterprise Integration Patterns (EIP)
• Specific context
• Forces at work
• Concrete solution
• Guidance for solutions to your problems
• 65 patterns
•
•

Splitter

•

Aggregator

•

11

Content Based Router

Filter
What is Apache Camel?
• Lightweight Integration Framework
• Open Source! (Apache Software Foundation)
• Routing and Mediation (like an ESB?)
• Enterprise Integration Patterns
• Components
• Domain Specific Language
• Runs in any container (or stand alone)

12
Camel Intro

13
Quick Example

File System

14

Message Oriented Middleware
Quick Example

From A

15

Filter
message

Send to B
Quick Example

from(A)

16

filter(predicate)

to(B)
Quick Example

from(A)

17

.filter(isWidget)

.to(B)
Quick Example

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

18
Quick Example

public class MyExampleRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {

Predicate isWidget = xpath("/quote/product = „widget‟");
from(“file:quote/location”)
.filter(isWidget).to(“jms:quote”);
}
}

19
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…)
•

20

from(“..”).enrich(“…”).filter(“..”).to(“…”);
Pipes and Filters Architecture

• Step by Step
• Complex processing
• Flexible
• Testing
• Reuse

21
Camel Routes
• 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
•

•

22

EIPs

Tranform, redirect, enrich
Domain Specific Language
• Example Java DSL
from("file:src/data?noop=true”)
.choice()
.when(xpath("/person/city = 'London'"))

.to("file:target/messages/uk »)
.otherwise()
.to("file:target/messages/others");

23
Domain Specific Language
• Example Spring XML DSL
<route>
<from uri="file:src/data?noop=true” />
<choice>
<when>
<xpath>/person/city = 'London'</xpath>
<to uri="file:target/messages/uk” />
</when>
<otherwise>
<to uri="file:target/messages/others" />
</otherwise>
</choice>
</route>

24
Components
• What is “file:src/data?noop=true” ??
• Prepackaged bits of code
• Highly configurable
• Used to build “Adapters” to existing systems
• Don‟t reinvent the wheel and end up with a box

25
Components…
• 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

26
Components…
http://camel.apache.org/components.html
•

•

GMail

•

AMQP

•

HTTP

•

ATOM feeds

•

IRC

•

AWS (Amazon Web Services)

•

jclouds

•

Bean

•

JDBC

•

Cache (EHCache)

•

Jetty

•

CXF (JAX-WS, JAX-RS)

•

Twitter

•

EJB

•

MQTT

•

Drools

•

MyBatis

•

File

•

JPA

•

FTP

•

Spring Integration

•

27

ActiveMQ, Websphere, Weblogic (JMS)

Google App Engine

•

Spring Web Services

To see list of all
components!!
Essential Components

28
Essential Components
• File

(camel-core)

• Bean

(camel-core)

• Log

(camel-core)

• JMS

(camel-jms)

• CXF

(camel-cxf)

• Mock

(camel-core)

http://refcardz.dzone.com/refcardz/essential-camel-components

29
Essential Components
• File

(camel-core)

• Bean

(camel-core)

• Log

(camel-core)

• JMS

(camel-jms)

• CXF

(camel-cxf)

• Mock

(camel-core)

30
File Component (camel-core)
• File integrations still exist!
• Legacy systems
• Batch jobs
• Many third party libraries for interfacing with the
filesystem

• Why write app-specific file-system code for every app?

31
File Component (camel-core)
• How long would it take you to implement this:
•

Periodically polls a predefined location

•

Picks up files

•

Sends them to a JMS queue?

• How about…
from(“file:/location/path?move=.processed”).to(“jms:queueName”)

• URI format: file:path[?options]

32
File Component (camel-core)
• Reads and writes file to the file system
• Endpoint URIs
•

UNIX, absolute path
file:/directoryPath[?options]

•

Windows absolute path
file:C://directoryPath[?options]

•

Relative path
file:directoryPath[?options]

33
File Component (camel-core)
• Default behavior
1. Read all files in directory

2. Create a new message
3. Process message through route

•

Filenames starting with „.‟ character are ignored

•

File component is one of the most flexible
components with many config options

34
File Component configuration options
Option

Default

Description

delay

500ms

Time to delay between polling

initialDelay

1000ms

How long before polling starts

delete

False

Whether or not to delete the file after it‟s been processed

doneFileName null

This file must exist before Camel will process the files in
the directory

fileName

null

Explicit filename to poll. Only processes if file exists

include

null

A {regex} that can specify patterns of files to process

exclude

null

A {regex} specifying patterns of files to ignore

preMove

null

Move files to sub-directory before processing

readLock

markerFile Strategy for how to exclusively lock a file before
processing

See http://camel.apache.org/file2.html for more

35
File Component things to watch out
• Files are locked until route completes
• Files starting with “.” are ignored
• By default, when a file has been processed, Camel
will move the file to .camel file unless a
move=<location> option specified

• Moving/Deleting files will happen after routing

36
File Examples

from("file://inbox?preMove=.inprogress&move=.done")
.to(“activemq:queue:myQueue");
from("direct:report")
.to("file://target/reports/?fileName=report.txt");
from("file://data?exclude=_.*")
.to("bean:handleData?method=processData");

from("file://data?sortBy=date:file:yyyyMMdd;file:name")
.to(“direct:sorted");

See http://camel.apache.org/direct.html for info on direct component

37
Essential Components
• File

(camel-core)

• Bean

(camel-core)

• Log

(camel-core)

• JMS

(camel-jms)

• CXF

(camel-cxf)

• Mock

(camel-core)

38
Bean Component (camel-core)
• Implements Service Activator EIP
•

http://www.eaipatterns.com/MessagingAdapter.html

•

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

• Allows connecting existing Java Bean/POJO logic to
Camel route C
a
m
e
l
R
o
u
t
e

39
Bean Component (camel-core)
• Invoke method on Java object to process incoming
message

• Endpoint URI format: bean:beanID[?options]
•

from(“direct:incoming”).to(“bean:enrichService”).to(“file:data/output”)

• Define your beans in the Spring Context as you would
any bean
•

<bean id="enrichService" class="com.christianposta.refcard.CreditService" />

• Binds message and/or headers to bean method
parameters

40
Bean Component (camel-core)
• Call using to(..)
•

from(“direct:incoming”).to(“bean:enrichService?method=getCreditScore”)

•

from(“direct:incoming”).to(“bean:enrichService”)

• Call using .bean(…)
•

from(“direct:incoming”).bean(CreditService.class, “getCreditScore”)

•

from(“direct:incoming”).bean(new CreditService(), “getCreditScore”)

• Call using .beanRef(…)
•

41

from(“direct:incoming”).beanRef(“enrichService”, “getCreditScore”)
Bean Examples
Custom class

public class CreditService {
public int getCreditScore(@XPath("/Borrower/BorrowerId") long borrowerId)
{
… body of impl here …
}

}

Spring bean definition
<bean id="enrichService” class="com.christianposta.refcard.CreditService" />

Camel route using bean component
from(“jms:incoming”).to(“bean:enrichService?method=getCreditScore”).to(“jms:outgoing”);

42
Bean Component: How are methods matched?
• By configuration: ?method=getCreditScore
• Single method in class
• Message Header named CamelBeanMethodName
• Method with only one parameter
• @Handler annotation
• By type (following internal algorithm)

43
Bean Component: How are parameters matched?
• Automatically binds method parameters
•

public void getCreditScore(Exchange exchange)

•

public void getCreditScore(@Header(“customerId”) String
customerId)

•

public void getCreditScore(Message message)

•

public void getCreditScore(byte[] bytes)

• Expression languages (simple, UEL, OGNL, groovy)
• TypeConverters if possible to bind parameters
• Error if cannot convert exchange to param type
• See http://camel.apache.org/bean-binding.html
44
Essential Components
• File

(camel-core)

• Bean

(camel-core)

• Log

(camel-core)

• JMS

(camel-jms)

• CXF

(camel-cxf)

• Mock

(camel-core)

45
Log Component (camel-core)
• Always use logging in your route!
• Camel uses SLF4J
•

Log4j

•

Logback

•

JDK Util Logging

• Log Component used for logging message exchanges
and/or parts of an exchange
•

•

46

Headers

Body
Log Component (camel-core)
• Log Component vs .log() DSL?
•

Component logs exchanges

•

DSL logs custom expressions

•

Both allow you to specify log level

• Endpoint URI format: log:category[?options]
•
•

47

category would be package name, eg.
com.mycompanyname.project
Options to control what part of the message is logged
Log Component configuration options

Option

Description

showAll

Turns on all options, such as body, body type, headers, out
message, strackTraces, etc.

showExchangeId

Log the exchangeId

showBodyType

Logs the Java type for the body of the In message

showBody

Log the actual contents of the body

showHeaders

Log all of the headers of the In message

See http://camel.apache.org/log.html for more

48
Log Examples
Log Component
from(“direct:incoming”).to(“log:org.apache.camel?level=INFO”).to(“jms:outgoingQueue”);
from(“direct:incoming”)
.to(“log:org.apache.camellevel=INFO&showBody=false&showHeaders=true”)
.to(“jms:outgoingQueue”);
from(“direct:incoming”)
.to(“log:org.apache.camel?level=INFO&multiline=true”).to(“jms:outgoingQueue”);

Log DSL
from(“direct:incoming”)
.log(LoggingLevel.INFO, “We received a body: ${body}”)
.to(“jms:outgoingQueue”);

49
Log Examples
Log Component
from(“direct:incoming”).to(“log:org.apache.camel?level=INFO”).to(“jms:outgoingQueue”);

Log Output
Exchange[
ExchangePattern:InOut,
Headers:{
breadcrumbId=ID-FusePostaMac-local-54392-1358803440276-0-9,
CamelToEndpoint=bean://enrichService?method=getCreditScore, creditScore=400,
LoanNumber=100001
},
BodyType:String,
Body: <contents here … >
]

50
Essential Components
• File

(camel-core)

• Bean

(camel-core)

• Log

(camel-core)

• JMS

(camel-jms)

• CXF

(camel-cxf)

• Mock

(camel-core)

51
JMS Component (camel-jms)
• Not part of camel-core, so must add additional maven
dependency
<dependency>
<groupId>org.apache.camel<groupId>
<artifactId>camel-jms</groupId>
<version>${camel-version}</version>
</dependency>

52
JMS Component (camel-jms)
• Used to connect to JMS compliant message broker
• Endpoint URI Format
•

jms:[temp:][queue:|topic:]DestinationName[?options]

• Configure a JmsComponent bean in Spring XML
• Replace the jms: prefix with the bean name of the
JmsComponent bean
Example
<bean id=”activemq" class=”org.apache.activemq.camel.component.ActiveMQComponent” >
<property name=“brokerURL” value=“tcp://localhost:61616” />
</bean>
from(“activemq:incoming”).process(…).to(“activemq:outgoing”);

53
JMS Component (camel-jms)
• Default destination is Queue
from(“activemq:incoming”).process(…).to(“activemq:outgoing”);

• Specify explicitly
from(“activemq:queue:incoming”).process(…).to(“activemq:queue:outgoing”);

• Specify Topic
from(“activemq:topic:incoming”).process(…).to(“activemq:topic:outgoing”);

54
JMS Component (camel-jms)
• Pool your connections, sessions, consumers
• Set up connection pool
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
<property name="configuration" ref="jmsConfig" />
< /bean>
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration" >
<property name="connectionFactory" ref="jmsPooledConnectionFactory" />
<property name="cacheLevelName" value="CACHE_CONSUMER" />
< /bean>
<bean id="jmsPooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
init-method="start" destroy-method="stop" >
<property name="maxConnections" value="2" />
<property name="connectionFactory" ref="jmsConnectionFactory" />
< /bean>

55
JMS Component configuration options
Option

Default

Description

asyncConsumer

false

Process messages asynchronously

concurrentConsumers

1

Number of concurrent consumers

cacheLevelName

CACHE_
AUTO

Determines what JMS objects to cache,
Connections, Sessions, Consumers, None, Auto.

transacted

true

Use transacted sessions

clientId

null

Unique connection ID (used for duable sub)

durableSubscriptionNa null
me

Subscriber name for durable subscriptions

disableReplyTo

false

Treat all messages as InOnly, ignore JMSReplyTo

replyTo

null

Default replyTo destination

Selector

null

Set the JMS selector

timeToLive

null

JMS time to live

See http://camel.apache.org/jms.html for more

56
JMS Examples
Multiple consumers
from(“jms:incomingQueue?concurrentConsumers=5”).bean(someBean).to(“jms:outgoingQueue”);
Durable Subscriber
from(“jms”topic:incoming?clientId=1&durableSubscriptionName=foo1”).bean(someBean);
Selectors
from(“jms:incomingQueue?selector=headerName %3D „somevalue‟”).to(“jms:outgoingQueue”);

Request Reply
from(“direct:incoming”).inOut().to(“jms:outgoingQueue”).to(“bean:someBean”);

57
Essential Components
• File

(camel-core)

• Bean

(camel-core)

• Log

(camel-core)

• JMS

(camel-jms)

• CXF

(camel-cxf)

• Mock

(camel-core)

58
CXF Component (camel-cxf)
• Not part of camel-core, so must add additional maven
dependency
<dependency>
<groupId>org.apache.camel<groupId>
<artifactId>camel-cxf</groupId>
<version>${camel-version}</version>
</dependency>

59
CXF Component (camel-cxf)
• Integrates with CXF web services framework
• Consumers (expose web service), Producers
(consume web service)
• Endpoint URI format:
•

Address style: cxf:address[?options]

•

Bean style: cxf:bean:beanName

• Address Style
•

No bean necessary, URI quite verbose, CXF config limited

• Bean Style
•

60

Compact, flexible config allows CXF interceptors, etc
CXF bean endpoint configuration
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cxf="http://camel.apache.org/schema/cxf"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd
http://camel.apache.org/schema/cxf
http://camel.apache.org/schema/cxf/camel-cxf.xsd">
Service Endpoint
Interface
<cxf:cxfEndpoint id="helloWorldWS"
wsdlURL="wsdl/HelloWorld.wsdl"
WSDL definition
serviceClass="org.apache.helloworld.HelloWorld"
address=http://localhost:9090/helloworld
serviceName=“tns:HelloService”
Where to publish
endpointName=“tns:SoapOverHttpEndpoint
>
</cxf:cxfEndpoint>

from(“cxf:bean:helloWorldWS”).bean(“processWS”);

61
CXF bean endpoint configuration
• Setting the serviceClass attribute
•

In CXF, we set serviceClass to
•
•

•

The JAX-WS interface in web client endpoints
The JAX-WS implementation class in web service endpoints
because we want CXF to dispatch requests to our code

In Camel routes, we set serviceClass to the JAX-WS
interface for producers or consumers because we want
Camel to process to requests

• Using JAX-WS annotations
•

62

Can omit the wsdlUrl, serviceName, and endpointName
attributes from endpoint bean
CXF Address endpoint configuration
• More verbose
• Clutters up the route by mixing details
• Useful for testing
• Cannot configure CXF details
from(“cxf:http://localhost:9090/helloworld?serviceClass=org.apache.hellowo
rld.HelloWorld&wsldUrl=wsdl/HelloWorld.wsdl&serviceName=tns:HelloServi
ce”).bean(“processWS”);

63
CXF Payload
• The dataFormat option can have one of the
following values:
•

POJO – arguments bound to plain old java objects

•

PAYLOAD – message payload <soap:body>

•

MESSAGE – raw message, as InputStream

Address style
from(“cxf:http://localhost:8080/?dataFormat=PAYLOAD”).bean(“processWS”);
Bean style
from(“cxf:bean:helloWorldWS”).bean(“processWS”);
<cxf:cxfEndpoint id=“helloWorldWS” … >
<cxf:properties>
<entry key=“dataFormat” value=“MESSAGE”/>
</cxf:properties>
</cxf:cxfEndpoint>
64
Essential Components
• File

(camel-core)

• Bean

(camel-core)

• Log

(camel-core)

• JMS

(camel-jms)

• CXF

(camel-cxf)

• Mock

(camel-core)

65
Mock Component (camel-mock)
• 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
•
•

Test

•

66

Declare

Assert
Mock Component (camel-mock)
• Endpoint URI format: mock:mockName[?options]
• Can use just the same as any endpoint:
from(“direct:incoming”)

.choice()
.when(header(“loanNumber”).isGreaterThan(12345))
.to(“mock:specialLoan”)
.when(header(“loanNumber”).isLessThan(12345))
.to(“mock:regularLoan”)
.to(“mock:outgoing”);

67
Mock Component declare, test, assert

// look up the endpoint
MockEndpoint resultEndpoint =
context.resolveEndpoint(“mock:outgoing”,
MockEndpoint.class);
// set expectations
resultEndpoint.expectedMessageCount(2);
// send some messages
...

// assert expectations
resultEndpoint.assertIsSatisfied();

68
Mock endpoint expectations
Expectation method

Description

expectedMessageCount(int)

The number of messages that must have
come through this mock

expectedMinimumMessageCount(int)

The minimum number of messages that
must have come to this mock

expectedBodiesReceived(Object …)

The list of bodies must have come through
this mock

expectedHeadersReceived(Object …)

The list of headers that must have come
through this mock

expectsNoDuplicates(Expression)

No duplicate messages based on the
expression (usually a unique header)

See http://camel.apache.org/mock.html for more

69
Mock endpoint expectations
• Can also set expectations on individual messages
• mockEndpoint.message(int).body()…

MockEndpoint mockEndpoint = getMockEndpoint(“mock:sink”);
mockEndpoint.message(0).body(String.class).contains("John Doe");
sinkEndpoint.message(0).header("loanNumber").isEqualTo(123456);

70
More Information

71
DZone Refcardz

REFCARDZ

• Camel Essential Components
•

http://refcardz.dzone.com/refcardz/essential-camel-components

• Essential EIP with Apache Camel
•

72

http://refcardz.dzone.com/refcardz/enterprise-integration
Red Hat / Fuse Source

73
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/user-stories.html

•

http://camel.apache.org/user-stories.html

•

http://www.davsclaus.com

•
74

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

http://www.christianposta.com/blog
Camel In Action
• Published 2011
• Claus Ibsen and Jon Anstey
• Covers EIPs, DSL, Components,
Transactions, Threading, Expressions,
Error Handling, Monitoring, etc

• In depth, examples, source code
• Source code kept up to date!
•
•

75

http://code.google.com/p/camelinaction/
http://www.davsclaus.com/2013/01/camel-in-action-2years-later.html
Contact Me


Email: christian@redhat.com
ceposta@apache.org




Twitter: @christianposta



76

Blog: http://www.christianposta.com/blog
Google+
Q&A

77

More Related Content

What's hot

Web assembly overview by Mikhail Sorokovsky
Web assembly overview by Mikhail SorokovskyWeb assembly overview by Mikhail Sorokovsky
Web assembly overview by Mikhail SorokovskyValeriia Maliarenko
 
APEX Interactive Grid API Essentials: The Stuff You Will Really Use
APEX Interactive Grid API Essentials:  The Stuff You Will Really UseAPEX Interactive Grid API Essentials:  The Stuff You Will Really Use
APEX Interactive Grid API Essentials: The Stuff You Will Really UseKaren Cannell
 
Connecting Connect with Spring Boot
Connecting Connect with Spring BootConnecting Connect with Spring Boot
Connecting Connect with Spring BootVincent Kok
 
Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Lucas Jellema
 
Top 10 Front End Developer Skills | How to become a Front End Developer? Edureka
Top 10 Front End Developer Skills | How to become a Front End Developer? EdurekaTop 10 Front End Developer Skills | How to become a Front End Developer? Edureka
Top 10 Front End Developer Skills | How to become a Front End Developer? EdurekaEdureka!
 
Database Change Management
Database Change Management Database Change Management
Database Change Management headspringlabs
 
Spark as a Platform to Support Multi-Tenancy and Many Kinds of Data Applicati...
Spark as a Platform to Support Multi-Tenancy and Many Kinds of Data Applicati...Spark as a Platform to Support Multi-Tenancy and Many Kinds of Data Applicati...
Spark as a Platform to Support Multi-Tenancy and Many Kinds of Data Applicati...Spark Summit
 
MySQL Index Cookbook
MySQL Index CookbookMySQL Index Cookbook
MySQL Index CookbookMYXPLAIN
 
Mean Stack - An Overview
Mean Stack - An OverviewMean Stack - An Overview
Mean Stack - An OverviewNaveen Pete
 
Overview - ESBs and IBM Integration Bus
Overview - ESBs and IBM Integration BusOverview - ESBs and IBM Integration Bus
Overview - ESBs and IBM Integration BusJuarez Junior
 
An introduction to Apache Camel
An introduction to Apache CamelAn introduction to Apache Camel
An introduction to Apache CamelKapil Kumar
 

What's hot (15)

Web assembly overview by Mikhail Sorokovsky
Web assembly overview by Mikhail SorokovskyWeb assembly overview by Mikhail Sorokovsky
Web assembly overview by Mikhail Sorokovsky
 
Solr vs ElasticSearch
Solr vs ElasticSearchSolr vs ElasticSearch
Solr vs ElasticSearch
 
APEX Interactive Grid API Essentials: The Stuff You Will Really Use
APEX Interactive Grid API Essentials:  The Stuff You Will Really UseAPEX Interactive Grid API Essentials:  The Stuff You Will Really Use
APEX Interactive Grid API Essentials: The Stuff You Will Really Use
 
Connecting Connect with Spring Boot
Connecting Connect with Spring BootConnecting Connect with Spring Boot
Connecting Connect with Spring Boot
 
Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...
 
Top 10 Front End Developer Skills | How to become a Front End Developer? Edureka
Top 10 Front End Developer Skills | How to become a Front End Developer? EdurekaTop 10 Front End Developer Skills | How to become a Front End Developer? Edureka
Top 10 Front End Developer Skills | How to become a Front End Developer? Edureka
 
Apache Phoenix + Apache HBase
Apache Phoenix + Apache HBaseApache Phoenix + Apache HBase
Apache Phoenix + Apache HBase
 
Database Change Management
Database Change Management Database Change Management
Database Change Management
 
Spark as a Platform to Support Multi-Tenancy and Many Kinds of Data Applicati...
Spark as a Platform to Support Multi-Tenancy and Many Kinds of Data Applicati...Spark as a Platform to Support Multi-Tenancy and Many Kinds of Data Applicati...
Spark as a Platform to Support Multi-Tenancy and Many Kinds of Data Applicati...
 
MySQL Index Cookbook
MySQL Index CookbookMySQL Index Cookbook
MySQL Index Cookbook
 
Mean Stack - An Overview
Mean Stack - An OverviewMean Stack - An Overview
Mean Stack - An Overview
 
Overview - ESBs and IBM Integration Bus
Overview - ESBs and IBM Integration BusOverview - ESBs and IBM Integration Bus
Overview - ESBs and IBM Integration Bus
 
Ppt04-Kendall
Ppt04-KendallPpt04-Kendall
Ppt04-Kendall
 
React & GraphQL
React & GraphQLReact & GraphQL
React & GraphQL
 
An introduction to Apache Camel
An introduction to Apache CamelAn introduction to Apache Camel
An introduction to Apache Camel
 

Viewers also liked

Why real integration developers ride Camels
Why real integration developers ride CamelsWhy real integration developers ride Camels
Why real integration developers ride CamelsChristian Posta
 
Cloud Native Camel Riding
Cloud Native Camel RidingCloud Native Camel Riding
Cloud Native Camel RidingChristian Posta
 
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShiftReal-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShiftChristian Posta
 
JavaOne 2016: Kubernetes introduction for Java Developers
JavaOne 2016: Kubernetes introduction for Java Developers JavaOne 2016: Kubernetes introduction for Java Developers
JavaOne 2016: Kubernetes introduction for Java Developers Rafael Benevides
 
Chicago Microservices Integration Talk
Chicago Microservices Integration TalkChicago Microservices Integration Talk
Chicago Microservices Integration TalkChristian Posta
 
ActiveMQ 5.9.x new features
ActiveMQ 5.9.x new featuresActiveMQ 5.9.x new features
ActiveMQ 5.9.x new featuresChristian Posta
 
Polyglot Messaging with Apache ActiveMQ
Polyglot Messaging with Apache ActiveMQPolyglot Messaging with Apache ActiveMQ
Polyglot Messaging with Apache ActiveMQChristian Posta
 
Microservices with Apache Camel, DDD, and Kubernetes
Microservices with Apache Camel, DDD, and KubernetesMicroservices with Apache Camel, DDD, and Kubernetes
Microservices with Apache Camel, DDD, and KubernetesChristian Posta
 
Fuse integration-services
Fuse integration-servicesFuse integration-services
Fuse integration-servicesChristian Posta
 
Java one kubernetes, jenkins and microservices
Java one   kubernetes, jenkins and microservicesJava one   kubernetes, jenkins and microservices
Java one kubernetes, jenkins and microservicesChristian Posta
 
Microservices, DevOps, and Containers with OpenShift and Fabric8
Microservices, DevOps, and Containers with OpenShift and Fabric8Microservices, DevOps, and Containers with OpenShift and Fabric8
Microservices, DevOps, and Containers with OpenShift and Fabric8Christian Posta
 
Microservices with Spring Cloud, Netflix OSS and Kubernetes
Microservices with Spring Cloud, Netflix OSS and Kubernetes Microservices with Spring Cloud, Netflix OSS and Kubernetes
Microservices with Spring Cloud, Netflix OSS and Kubernetes Christian Posta
 
Managing your camels in the cloud with CI/CD
Managing your camels in the cloud with CI/CDManaging your camels in the cloud with CI/CD
Managing your camels in the cloud with CI/CDChristian Posta
 
How to choose the right Integration Framework - Apache Camel (JBoss, Talend),...
How to choose the right Integration Framework - Apache Camel (JBoss, Talend),...How to choose the right Integration Framework - Apache Camel (JBoss, Talend),...
How to choose the right Integration Framework - Apache Camel (JBoss, Talend),...Kai Wähner
 
Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2Christian Posta
 
Integrating Microservices with Apache Camel
Integrating Microservices with Apache CamelIntegrating Microservices with Apache Camel
Integrating Microservices with Apache CamelChristian Posta
 
Real world #microservices with Apache Camel, Fabric8, and OpenShift
Real world #microservices with Apache Camel, Fabric8, and OpenShiftReal world #microservices with Apache Camel, Fabric8, and OpenShift
Real world #microservices with Apache Camel, Fabric8, and OpenShiftChristian Posta
 
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO Christian Posta
 

Viewers also liked (20)

Why real integration developers ride Camels
Why real integration developers ride CamelsWhy real integration developers ride Camels
Why real integration developers ride Camels
 
Cloud Native Camel Riding
Cloud Native Camel RidingCloud Native Camel Riding
Cloud Native Camel Riding
 
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShiftReal-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
 
JavaOne 2016: Kubernetes introduction for Java Developers
JavaOne 2016: Kubernetes introduction for Java Developers JavaOne 2016: Kubernetes introduction for Java Developers
JavaOne 2016: Kubernetes introduction for Java Developers
 
DevNexus 2015
DevNexus 2015DevNexus 2015
DevNexus 2015
 
Chicago Microservices Integration Talk
Chicago Microservices Integration TalkChicago Microservices Integration Talk
Chicago Microservices Integration Talk
 
ActiveMQ 5.9.x new features
ActiveMQ 5.9.x new featuresActiveMQ 5.9.x new features
ActiveMQ 5.9.x new features
 
Polyglot Messaging with Apache ActiveMQ
Polyglot Messaging with Apache ActiveMQPolyglot Messaging with Apache ActiveMQ
Polyglot Messaging with Apache ActiveMQ
 
Microservices with Apache Camel, DDD, and Kubernetes
Microservices with Apache Camel, DDD, and KubernetesMicroservices with Apache Camel, DDD, and Kubernetes
Microservices with Apache Camel, DDD, and Kubernetes
 
Fuse integration-services
Fuse integration-servicesFuse integration-services
Fuse integration-services
 
Java one kubernetes, jenkins and microservices
Java one   kubernetes, jenkins and microservicesJava one   kubernetes, jenkins and microservices
Java one kubernetes, jenkins and microservices
 
Microservices, DevOps, and Containers with OpenShift and Fabric8
Microservices, DevOps, and Containers with OpenShift and Fabric8Microservices, DevOps, and Containers with OpenShift and Fabric8
Microservices, DevOps, and Containers with OpenShift and Fabric8
 
Microservices with Spring Cloud, Netflix OSS and Kubernetes
Microservices with Spring Cloud, Netflix OSS and Kubernetes Microservices with Spring Cloud, Netflix OSS and Kubernetes
Microservices with Spring Cloud, Netflix OSS and Kubernetes
 
Managing your camels in the cloud with CI/CD
Managing your camels in the cloud with CI/CDManaging your camels in the cloud with CI/CD
Managing your camels in the cloud with CI/CD
 
How to choose the right Integration Framework - Apache Camel (JBoss, Talend),...
How to choose the right Integration Framework - Apache Camel (JBoss, Talend),...How to choose the right Integration Framework - Apache Camel (JBoss, Talend),...
How to choose the right Integration Framework - Apache Camel (JBoss, Talend),...
 
Microservices and APIs
Microservices and APIsMicroservices and APIs
Microservices and APIs
 
Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2
 
Integrating Microservices with Apache Camel
Integrating Microservices with Apache CamelIntegrating Microservices with Apache Camel
Integrating Microservices with Apache Camel
 
Real world #microservices with Apache Camel, Fabric8, and OpenShift
Real world #microservices with Apache Camel, Fabric8, and OpenShiftReal world #microservices with Apache Camel, Fabric8, and OpenShift
Real world #microservices with Apache Camel, Fabric8, and OpenShift
 
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
DevOps with ActiveMQ, Camel, Fabric8, and HawtIO
 

Similar to Essential Camel Components

Solving Enterprise Integration with Apache Camel
Solving Enterprise Integration with Apache CamelSolving Enterprise Integration with Apache Camel
Solving Enterprise Integration with Apache CamelChristian Posta
 
Apache Camel Introduction
Apache Camel IntroductionApache Camel Introduction
Apache Camel IntroductionClaus Ibsen
 
S2GX 2012 - Introduction to Spring Integration and Spring Batch
S2GX 2012 - Introduction to Spring Integration and Spring BatchS2GX 2012 - Introduction to Spring Integration and Spring Batch
S2GX 2012 - Introduction to Spring Integration and Spring BatchGunnar Hillert
 
MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.
MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.
MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.Cloud Native Day Tel Aviv
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Lucidworks
 
Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Claus Ibsen
 
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptx
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptxIBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptx
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptxGeorg Ember
 
Simplify your integrations with Apache Camel
Simplify your integrations with Apache CamelSimplify your integrations with Apache Camel
Simplify your integrations with Apache CamelKenneth Peeples
 
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charity
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charityIntegrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charity
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charityKrzysztof Sobkowiak
 
MuleSoft Manchester Meetup #3 slides 31st March 2020
MuleSoft Manchester Meetup #3 slides 31st March 2020MuleSoft Manchester Meetup #3 slides 31st March 2020
MuleSoft Manchester Meetup #3 slides 31st March 2020Ieva Navickaite
 
Big data, just an introduction to Hadoop and Scripting Languages
Big data, just an introduction to Hadoop and Scripting LanguagesBig data, just an introduction to Hadoop and Scripting Languages
Big data, just an introduction to Hadoop and Scripting LanguagesCorley S.r.l.
 
Accelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderAccelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderDatabricks
 
Getting Started with MariaDB with Docker
Getting Started with MariaDB with DockerGetting Started with MariaDB with Docker
Getting Started with MariaDB with DockerMariaDB plc
 
TS 4839 - Enterprise Integration Patterns in Practice
TS 4839 - Enterprise Integration Patterns in PracticeTS 4839 - Enterprise Integration Patterns in Practice
TS 4839 - Enterprise Integration Patterns in Practiceaegloff
 
MuleSoft Meetup 3 Charlotte Presentation Slides
MuleSoft Meetup 3 Charlotte Presentation SlidesMuleSoft Meetup 3 Charlotte Presentation Slides
MuleSoft Meetup 3 Charlotte Presentation SlidesSubhash Patel
 
Lessons learned while building Omroep.nl
Lessons learned while building Omroep.nlLessons learned while building Omroep.nl
Lessons learned while building Omroep.nlbartzon
 

Similar to Essential Camel Components (20)

Solving Enterprise Integration with Apache Camel
Solving Enterprise Integration with Apache CamelSolving Enterprise Integration with Apache Camel
Solving Enterprise Integration with Apache Camel
 
Apache Camel Introduction
Apache Camel IntroductionApache Camel Introduction
Apache Camel Introduction
 
S2GX 2012 - Introduction to Spring Integration and Spring Batch
S2GX 2012 - Introduction to Spring Integration and Spring BatchS2GX 2012 - Introduction to Spring Integration and Spring Batch
S2GX 2012 - Introduction to Spring Integration and Spring Batch
 
TechBeats #2
TechBeats #2TechBeats #2
TechBeats #2
 
MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.
MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.
MySQL Shell: the daily tool for devs and admins. By Vittorio Cioe.
 
EIP In Practice
EIP In PracticeEIP In Practice
EIP In Practice
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
 
Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...
 
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptx
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptxIBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptx
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptx
 
SolrCloud on Hadoop
SolrCloud on HadoopSolrCloud on Hadoop
SolrCloud on Hadoop
 
Simplify your integrations with Apache Camel
Simplify your integrations with Apache CamelSimplify your integrations with Apache Camel
Simplify your integrations with Apache Camel
 
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charity
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charityIntegrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charity
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charity
 
MuleSoft Manchester Meetup #3 slides 31st March 2020
MuleSoft Manchester Meetup #3 slides 31st March 2020MuleSoft Manchester Meetup #3 slides 31st March 2020
MuleSoft Manchester Meetup #3 slides 31st March 2020
 
Big data, just an introduction to Hadoop and Scripting Languages
Big data, just an introduction to Hadoop and Scripting LanguagesBig data, just an introduction to Hadoop and Scripting Languages
Big data, just an introduction to Hadoop and Scripting Languages
 
Accelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderAccelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks Autoloader
 
Getting Started with MariaDB with Docker
Getting Started with MariaDB with DockerGetting Started with MariaDB with Docker
Getting Started with MariaDB with Docker
 
TS 4839 - Enterprise Integration Patterns in Practice
TS 4839 - Enterprise Integration Patterns in PracticeTS 4839 - Enterprise Integration Patterns in Practice
TS 4839 - Enterprise Integration Patterns in Practice
 
MuleSoft Meetup 3 Charlotte Presentation Slides
MuleSoft Meetup 3 Charlotte Presentation SlidesMuleSoft Meetup 3 Charlotte Presentation Slides
MuleSoft Meetup 3 Charlotte Presentation Slides
 
Lessons learned while building Omroep.nl
Lessons learned while building Omroep.nlLessons learned while building Omroep.nl
Lessons learned while building Omroep.nl
 
Introduction to Monsoon PHP framework
Introduction to Monsoon PHP frameworkIntroduction to Monsoon PHP framework
Introduction to Monsoon PHP framework
 

More from Christian Posta

Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioChristian Posta
 
Understanding Wireguard, TLS and Workload Identity
Understanding Wireguard, TLS and Workload IdentityUnderstanding Wireguard, TLS and Workload Identity
Understanding Wireguard, TLS and Workload IdentityChristian Posta
 
Compliance and Zero Trust Ambient Mesh
Compliance and Zero Trust Ambient MeshCompliance and Zero Trust Ambient Mesh
Compliance and Zero Trust Ambient MeshChristian Posta
 
Cilium + Istio with Gloo Mesh
Cilium + Istio with Gloo MeshCilium + Istio with Gloo Mesh
Cilium + Istio with Gloo MeshChristian Posta
 
Multi-cluster service mesh with GlooMesh
Multi-cluster service mesh with GlooMeshMulti-cluster service mesh with GlooMesh
Multi-cluster service mesh with GlooMeshChristian Posta
 
Multicluster Kubernetes and Service Mesh Patterns
Multicluster Kubernetes and Service Mesh PatternsMulticluster Kubernetes and Service Mesh Patterns
Multicluster Kubernetes and Service Mesh PatternsChristian Posta
 
Cloud-Native Application Debugging with Envoy and Service Mesh
Cloud-Native Application Debugging with Envoy and Service MeshCloud-Native Application Debugging with Envoy and Service Mesh
Cloud-Native Application Debugging with Envoy and Service MeshChristian Posta
 
Kubernetes Ingress to Service Mesh (and beyond!)
Kubernetes Ingress to Service Mesh (and beyond!)Kubernetes Ingress to Service Mesh (and beyond!)
Kubernetes Ingress to Service Mesh (and beyond!)Christian Posta
 
The Truth About the Service Mesh Data Plane
The Truth About the Service Mesh Data PlaneThe Truth About the Service Mesh Data Plane
The Truth About the Service Mesh Data PlaneChristian Posta
 
Deep Dive: Building external auth plugins for Gloo Enterprise
Deep Dive: Building external auth plugins for Gloo EnterpriseDeep Dive: Building external auth plugins for Gloo Enterprise
Deep Dive: Building external auth plugins for Gloo EnterpriseChristian Posta
 
Role of edge gateways in relation to service mesh adoption
Role of edge gateways in relation to service mesh adoptionRole of edge gateways in relation to service mesh adoption
Role of edge gateways in relation to service mesh adoptionChristian Posta
 
Navigating the service mesh landscape with Istio, Consul Connect, and Linkerd
Navigating the service mesh landscape with Istio, Consul Connect, and LinkerdNavigating the service mesh landscape with Istio, Consul Connect, and Linkerd
Navigating the service mesh landscape with Istio, Consul Connect, and LinkerdChristian Posta
 
Chaos Debugging for Microservices
Chaos Debugging for MicroservicesChaos Debugging for Microservices
Chaos Debugging for MicroservicesChristian Posta
 
Leveraging Envoy Proxy and GraphQL to Lower the Risk of Monolith to Microserv...
Leveraging Envoy Proxy and GraphQL to Lower the Risk of Monolith to Microserv...Leveraging Envoy Proxy and GraphQL to Lower the Risk of Monolith to Microserv...
Leveraging Envoy Proxy and GraphQL to Lower the Risk of Monolith to Microserv...Christian Posta
 
Service-mesh options with Linkerd, Consul, Istio and AWS AppMesh
Service-mesh options with Linkerd, Consul, Istio and AWS AppMeshService-mesh options with Linkerd, Consul, Istio and AWS AppMesh
Service-mesh options with Linkerd, Consul, Istio and AWS AppMeshChristian Posta
 
Intro Istio and what's new Istio 1.1
Intro Istio and what's new Istio 1.1Intro Istio and what's new Istio 1.1
Intro Istio and what's new Istio 1.1Christian Posta
 
API Gateways are going through an identity crisis
API Gateways are going through an identity crisisAPI Gateways are going through an identity crisis
API Gateways are going through an identity crisisChristian Posta
 
KubeCon NA 2018: Evolution of Integration and Microservices with Service Mesh...
KubeCon NA 2018: Evolution of Integration and Microservices with Service Mesh...KubeCon NA 2018: Evolution of Integration and Microservices with Service Mesh...
KubeCon NA 2018: Evolution of Integration and Microservices with Service Mesh...Christian Posta
 
PHX DevOps Days: Service Mesh Landscape
PHX DevOps Days: Service Mesh LandscapePHX DevOps Days: Service Mesh Landscape
PHX DevOps Days: Service Mesh LandscapeChristian Posta
 

More from Christian Posta (20)

Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
Understanding Wireguard, TLS and Workload Identity
Understanding Wireguard, TLS and Workload IdentityUnderstanding Wireguard, TLS and Workload Identity
Understanding Wireguard, TLS and Workload Identity
 
Compliance and Zero Trust Ambient Mesh
Compliance and Zero Trust Ambient MeshCompliance and Zero Trust Ambient Mesh
Compliance and Zero Trust Ambient Mesh
 
Cilium + Istio with Gloo Mesh
Cilium + Istio with Gloo MeshCilium + Istio with Gloo Mesh
Cilium + Istio with Gloo Mesh
 
Multi-cluster service mesh with GlooMesh
Multi-cluster service mesh with GlooMeshMulti-cluster service mesh with GlooMesh
Multi-cluster service mesh with GlooMesh
 
Multicluster Kubernetes and Service Mesh Patterns
Multicluster Kubernetes and Service Mesh PatternsMulticluster Kubernetes and Service Mesh Patterns
Multicluster Kubernetes and Service Mesh Patterns
 
Cloud-Native Application Debugging with Envoy and Service Mesh
Cloud-Native Application Debugging with Envoy and Service MeshCloud-Native Application Debugging with Envoy and Service Mesh
Cloud-Native Application Debugging with Envoy and Service Mesh
 
Kubernetes Ingress to Service Mesh (and beyond!)
Kubernetes Ingress to Service Mesh (and beyond!)Kubernetes Ingress to Service Mesh (and beyond!)
Kubernetes Ingress to Service Mesh (and beyond!)
 
The Truth About the Service Mesh Data Plane
The Truth About the Service Mesh Data PlaneThe Truth About the Service Mesh Data Plane
The Truth About the Service Mesh Data Plane
 
Deep Dive: Building external auth plugins for Gloo Enterprise
Deep Dive: Building external auth plugins for Gloo EnterpriseDeep Dive: Building external auth plugins for Gloo Enterprise
Deep Dive: Building external auth plugins for Gloo Enterprise
 
Role of edge gateways in relation to service mesh adoption
Role of edge gateways in relation to service mesh adoptionRole of edge gateways in relation to service mesh adoption
Role of edge gateways in relation to service mesh adoption
 
Navigating the service mesh landscape with Istio, Consul Connect, and Linkerd
Navigating the service mesh landscape with Istio, Consul Connect, and LinkerdNavigating the service mesh landscape with Istio, Consul Connect, and Linkerd
Navigating the service mesh landscape with Istio, Consul Connect, and Linkerd
 
Chaos Debugging for Microservices
Chaos Debugging for MicroservicesChaos Debugging for Microservices
Chaos Debugging for Microservices
 
Leveraging Envoy Proxy and GraphQL to Lower the Risk of Monolith to Microserv...
Leveraging Envoy Proxy and GraphQL to Lower the Risk of Monolith to Microserv...Leveraging Envoy Proxy and GraphQL to Lower the Risk of Monolith to Microserv...
Leveraging Envoy Proxy and GraphQL to Lower the Risk of Monolith to Microserv...
 
Service-mesh options with Linkerd, Consul, Istio and AWS AppMesh
Service-mesh options with Linkerd, Consul, Istio and AWS AppMeshService-mesh options with Linkerd, Consul, Istio and AWS AppMesh
Service-mesh options with Linkerd, Consul, Istio and AWS AppMesh
 
Intro Istio and what's new Istio 1.1
Intro Istio and what's new Istio 1.1Intro Istio and what's new Istio 1.1
Intro Istio and what's new Istio 1.1
 
API Gateways are going through an identity crisis
API Gateways are going through an identity crisisAPI Gateways are going through an identity crisis
API Gateways are going through an identity crisis
 
KubeCon NA 2018: Evolution of Integration and Microservices with Service Mesh...
KubeCon NA 2018: Evolution of Integration and Microservices with Service Mesh...KubeCon NA 2018: Evolution of Integration and Microservices with Service Mesh...
KubeCon NA 2018: Evolution of Integration and Microservices with Service Mesh...
 
PHX DevOps Days: Service Mesh Landscape
PHX DevOps Days: Service Mesh LandscapePHX DevOps Days: Service Mesh Landscape
PHX DevOps Days: Service Mesh Landscape
 
Intro to Knative
Intro to KnativeIntro to Knative
Intro to Knative
 

Recently uploaded

Tecnogravura, Cylinder Engraving for Rotogravure
Tecnogravura, Cylinder Engraving for RotogravureTecnogravura, Cylinder Engraving for Rotogravure
Tecnogravura, Cylinder Engraving for RotogravureAntonio de Llamas
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Arti Languages Pre Seed Pitchdeck 2024.pdf
Arti Languages Pre Seed Pitchdeck 2024.pdfArti Languages Pre Seed Pitchdeck 2024.pdf
Arti Languages Pre Seed Pitchdeck 2024.pdfwill854175
 
A PowerPoint Presentation on Vikram Lander pptx
A PowerPoint Presentation on Vikram Lander pptxA PowerPoint Presentation on Vikram Lander pptx
A PowerPoint Presentation on Vikram Lander pptxatharvdev2010
 
Automation Ops Series: Session 3 - Solutions management
Automation Ops Series: Session 3 - Solutions managementAutomation Ops Series: Session 3 - Solutions management
Automation Ops Series: Session 3 - Solutions managementDianaGray10
 
Software Security in the Real World w/Kelsey Hightower
Software Security in the Real World w/Kelsey HightowerSoftware Security in the Real World w/Kelsey Hightower
Software Security in the Real World w/Kelsey HightowerAnchore
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Efficiencies in RPA with UiPath and CyberArk Technologies - Session 2
Efficiencies in RPA with UiPath and CyberArk Technologies - Session 2Efficiencies in RPA with UiPath and CyberArk Technologies - Session 2
Efficiencies in RPA with UiPath and CyberArk Technologies - Session 2DianaGray10
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
The Critical Role of Spatial Data in Today's Data Ecosystem
The Critical Role of Spatial Data in Today's Data EcosystemThe Critical Role of Spatial Data in Today's Data Ecosystem
The Critical Role of Spatial Data in Today's Data EcosystemSafe Software
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
The work to make the piecework work: An ethnographic study of food delivery w...
The work to make the piecework work: An ethnographic study of food delivery w...The work to make the piecework work: An ethnographic study of food delivery w...
The work to make the piecework work: An ethnographic study of food delivery w...stockholm university
 
Transcript: Green paths: Learning from publishers’ sustainability journeys - ...
Transcript: Green paths: Learning from publishers’ sustainability journeys - ...Transcript: Green paths: Learning from publishers’ sustainability journeys - ...
Transcript: Green paths: Learning from publishers’ sustainability journeys - ...BookNet Canada
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
THE STATE OF STARTUP ECOSYSTEM - INDIA x JAPAN 2023
THE STATE OF STARTUP ECOSYSTEM - INDIA x JAPAN 2023THE STATE OF STARTUP ECOSYSTEM - INDIA x JAPAN 2023
THE STATE OF STARTUP ECOSYSTEM - INDIA x JAPAN 2023Joshua Flannery
 
QMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfQMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfROWELL MARQUINA
 

Recently uploaded (20)

Tecnogravura, Cylinder Engraving for Rotogravure
Tecnogravura, Cylinder Engraving for RotogravureTecnogravura, Cylinder Engraving for Rotogravure
Tecnogravura, Cylinder Engraving for Rotogravure
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Arti Languages Pre Seed Pitchdeck 2024.pdf
Arti Languages Pre Seed Pitchdeck 2024.pdfArti Languages Pre Seed Pitchdeck 2024.pdf
Arti Languages Pre Seed Pitchdeck 2024.pdf
 
A PowerPoint Presentation on Vikram Lander pptx
A PowerPoint Presentation on Vikram Lander pptxA PowerPoint Presentation on Vikram Lander pptx
A PowerPoint Presentation on Vikram Lander pptx
 
Automation Ops Series: Session 3 - Solutions management
Automation Ops Series: Session 3 - Solutions managementAutomation Ops Series: Session 3 - Solutions management
Automation Ops Series: Session 3 - Solutions management
 
Software Security in the Real World w/Kelsey Hightower
Software Security in the Real World w/Kelsey HightowerSoftware Security in the Real World w/Kelsey Hightower
Software Security in the Real World w/Kelsey Hightower
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Efficiencies in RPA with UiPath and CyberArk Technologies - Session 2
Efficiencies in RPA with UiPath and CyberArk Technologies - Session 2Efficiencies in RPA with UiPath and CyberArk Technologies - Session 2
Efficiencies in RPA with UiPath and CyberArk Technologies - Session 2
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
The Critical Role of Spatial Data in Today's Data Ecosystem
The Critical Role of Spatial Data in Today's Data EcosystemThe Critical Role of Spatial Data in Today's Data Ecosystem
The Critical Role of Spatial Data in Today's Data Ecosystem
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
The work to make the piecework work: An ethnographic study of food delivery w...
The work to make the piecework work: An ethnographic study of food delivery w...The work to make the piecework work: An ethnographic study of food delivery w...
The work to make the piecework work: An ethnographic study of food delivery w...
 
Transcript: Green paths: Learning from publishers’ sustainability journeys - ...
Transcript: Green paths: Learning from publishers’ sustainability journeys - ...Transcript: Green paths: Learning from publishers’ sustainability journeys - ...
Transcript: Green paths: Learning from publishers’ sustainability journeys - ...
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
THE STATE OF STARTUP ECOSYSTEM - INDIA x JAPAN 2023
THE STATE OF STARTUP ECOSYSTEM - INDIA x JAPAN 2023THE STATE OF STARTUP ECOSYSTEM - INDIA x JAPAN 2023
THE STATE OF STARTUP ECOSYSTEM - INDIA x JAPAN 2023
 
QMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfQMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdf
 

Essential Camel Components

  • 1. Apache Camel Essential Components Presenter: Christian Posta Title: Senior Consultant Date: January 23, 2013
  • 2. Agenda   What is Camel?  Camel Intro  Components  More Information  2 FuseSource/Red Hat Q&A
  • 3. FuseSource – the leading open source integration and messaging vendor...now a part of Red Hat!  FuseSource – a company built on success  Founded in 2005  Commercial Support   Camel, ActiveMQ, ServiceMix, CXF Enterprise Products   Production Support, Training, Consulting   Certified, hardened, based on open source Proven track record in mission-critical apps Acquired by Red Hat in September 2012  Two open source leaders in the market: comprehensive middleware solutions   3 Share a maniacal focus on community Offices in almost all time zones and over 30 countries
  • 4. Same Great Products and Services – and More    FuseSource / Red Hat will continue to offer and support all FuseSource products Continued training, consulting, and subscriptions – more coverage fusesource.com transitioning to redhat.com   Community – need to re-register at redhat.com  4 JIRAS → redhat.com fusesource.com - maintained at least through 2013
  • 5. About Me  Christian Posta  Senior Consultant  Committer at Apache on ActiveMQ, Apollo  Email: christian@redhat.com ceposta@apache.org   Twitter: @christianposta  5 Blog: http://www.christianposta.com/blog Google+
  • 7. What isn‟t Apache Camel • Enterprise Service Bus (ESB) • Container • ServiceMix/FuseESB • OSGi container • Tomcat, JBoss, Geronimo • Commercial App Servers • Proprietary, closed source 7
  • 8. Integration Use Camel to Integrate disparate systems that talk different protocols and data formats. 8
  • 9. Integrate?? • Integration is Hard! • Different system vintages • Mainframe, EAI Hub, MOM, EJB, Web Services • Evolving business processes • Systems must work together • File exchange, Shared Database, Remote Procedure Call (RPC), Messaging 9
  • 10. Why integration is hard… • Platforms • Protocols • Data Formats • Timing • Organizational mismatch • Communication Hard, but not impossible, definitely not new… 10
  • 11. Patterns! • Enterprise Integration Patterns (EIP) • Specific context • Forces at work • Concrete solution • Guidance for solutions to your problems • 65 patterns • • Splitter • Aggregator • 11 Content Based Router Filter
  • 12. What is Apache Camel? • Lightweight Integration Framework • Open Source! (Apache Software Foundation) • Routing and Mediation (like an ESB?) • Enterprise Integration Patterns • Components • Domain Specific Language • Runs in any container (or stand alone) 12
  • 18. Quick Example isWidget = xpath(“/quote/product = „widget‟”); from(A) .filter(isWidget). to(B) 18
  • 19. Quick Example public class MyExampleRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { Predicate isWidget = xpath("/quote/product = „widget‟"); from(“file:quote/location”) .filter(isWidget).to(“jms:quote”); } } 19
  • 20. 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…) • 20 from(“..”).enrich(“…”).filter(“..”).to(“…”);
  • 21. Pipes and Filters Architecture • Step by Step • Complex processing • Flexible • Testing • Reuse 21
  • 22. Camel Routes • 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 • • 22 EIPs Tranform, redirect, enrich
  • 23. Domain Specific Language • Example Java DSL from("file:src/data?noop=true”) .choice() .when(xpath("/person/city = 'London'")) .to("file:target/messages/uk ») .otherwise() .to("file:target/messages/others"); 23
  • 24. Domain Specific Language • Example Spring XML DSL <route> <from uri="file:src/data?noop=true” /> <choice> <when> <xpath>/person/city = 'London'</xpath> <to uri="file:target/messages/uk” /> </when> <otherwise> <to uri="file:target/messages/others" /> </otherwise> </choice> </route> 24
  • 25. Components • What is “file:src/data?noop=true” ?? • Prepackaged bits of code • Highly configurable • Used to build “Adapters” to existing systems • Don‟t reinvent the wheel and end up with a box 25
  • 26. Components… • 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 26
  • 27. Components… http://camel.apache.org/components.html • • GMail • AMQP • HTTP • ATOM feeds • IRC • AWS (Amazon Web Services) • jclouds • Bean • JDBC • Cache (EHCache) • Jetty • CXF (JAX-WS, JAX-RS) • Twitter • EJB • MQTT • Drools • MyBatis • File • JPA • FTP • Spring Integration • 27 ActiveMQ, Websphere, Weblogic (JMS) Google App Engine • Spring Web Services To see list of all components!!
  • 29. Essential Components • File (camel-core) • Bean (camel-core) • Log (camel-core) • JMS (camel-jms) • CXF (camel-cxf) • Mock (camel-core) http://refcardz.dzone.com/refcardz/essential-camel-components 29
  • 30. Essential Components • File (camel-core) • Bean (camel-core) • Log (camel-core) • JMS (camel-jms) • CXF (camel-cxf) • Mock (camel-core) 30
  • 31. File Component (camel-core) • File integrations still exist! • Legacy systems • Batch jobs • Many third party libraries for interfacing with the filesystem • Why write app-specific file-system code for every app? 31
  • 32. File Component (camel-core) • How long would it take you to implement this: • Periodically polls a predefined location • Picks up files • Sends them to a JMS queue? • How about… from(“file:/location/path?move=.processed”).to(“jms:queueName”) • URI format: file:path[?options] 32
  • 33. File Component (camel-core) • Reads and writes file to the file system • Endpoint URIs • UNIX, absolute path file:/directoryPath[?options] • Windows absolute path file:C://directoryPath[?options] • Relative path file:directoryPath[?options] 33
  • 34. File Component (camel-core) • Default behavior 1. Read all files in directory 2. Create a new message 3. Process message through route • Filenames starting with „.‟ character are ignored • File component is one of the most flexible components with many config options 34
  • 35. File Component configuration options Option Default Description delay 500ms Time to delay between polling initialDelay 1000ms How long before polling starts delete False Whether or not to delete the file after it‟s been processed doneFileName null This file must exist before Camel will process the files in the directory fileName null Explicit filename to poll. Only processes if file exists include null A {regex} that can specify patterns of files to process exclude null A {regex} specifying patterns of files to ignore preMove null Move files to sub-directory before processing readLock markerFile Strategy for how to exclusively lock a file before processing See http://camel.apache.org/file2.html for more 35
  • 36. File Component things to watch out • Files are locked until route completes • Files starting with “.” are ignored • By default, when a file has been processed, Camel will move the file to .camel file unless a move=<location> option specified • Moving/Deleting files will happen after routing 36
  • 38. Essential Components • File (camel-core) • Bean (camel-core) • Log (camel-core) • JMS (camel-jms) • CXF (camel-cxf) • Mock (camel-core) 38
  • 39. Bean Component (camel-core) • Implements Service Activator EIP • http://www.eaipatterns.com/MessagingAdapter.html • http://camel.apache.org/bean.html • Allows connecting existing Java Bean/POJO logic to Camel route C a m e l R o u t e 39
  • 40. Bean Component (camel-core) • Invoke method on Java object to process incoming message • Endpoint URI format: bean:beanID[?options] • from(“direct:incoming”).to(“bean:enrichService”).to(“file:data/output”) • Define your beans in the Spring Context as you would any bean • <bean id="enrichService" class="com.christianposta.refcard.CreditService" /> • Binds message and/or headers to bean method parameters 40
  • 41. Bean Component (camel-core) • Call using to(..) • from(“direct:incoming”).to(“bean:enrichService?method=getCreditScore”) • from(“direct:incoming”).to(“bean:enrichService”) • Call using .bean(…) • from(“direct:incoming”).bean(CreditService.class, “getCreditScore”) • from(“direct:incoming”).bean(new CreditService(), “getCreditScore”) • Call using .beanRef(…) • 41 from(“direct:incoming”).beanRef(“enrichService”, “getCreditScore”)
  • 42. Bean Examples Custom class public class CreditService { public int getCreditScore(@XPath("/Borrower/BorrowerId") long borrowerId) { … body of impl here … } } Spring bean definition <bean id="enrichService” class="com.christianposta.refcard.CreditService" /> Camel route using bean component from(“jms:incoming”).to(“bean:enrichService?method=getCreditScore”).to(“jms:outgoing”); 42
  • 43. Bean Component: How are methods matched? • By configuration: ?method=getCreditScore • Single method in class • Message Header named CamelBeanMethodName • Method with only one parameter • @Handler annotation • By type (following internal algorithm) 43
  • 44. Bean Component: How are parameters matched? • Automatically binds method parameters • public void getCreditScore(Exchange exchange) • public void getCreditScore(@Header(“customerId”) String customerId) • public void getCreditScore(Message message) • public void getCreditScore(byte[] bytes) • Expression languages (simple, UEL, OGNL, groovy) • TypeConverters if possible to bind parameters • Error if cannot convert exchange to param type • See http://camel.apache.org/bean-binding.html 44
  • 45. Essential Components • File (camel-core) • Bean (camel-core) • Log (camel-core) • JMS (camel-jms) • CXF (camel-cxf) • Mock (camel-core) 45
  • 46. Log Component (camel-core) • Always use logging in your route! • Camel uses SLF4J • Log4j • Logback • JDK Util Logging • Log Component used for logging message exchanges and/or parts of an exchange • • 46 Headers Body
  • 47. Log Component (camel-core) • Log Component vs .log() DSL? • Component logs exchanges • DSL logs custom expressions • Both allow you to specify log level • Endpoint URI format: log:category[?options] • • 47 category would be package name, eg. com.mycompanyname.project Options to control what part of the message is logged
  • 48. Log Component configuration options Option Description showAll Turns on all options, such as body, body type, headers, out message, strackTraces, etc. showExchangeId Log the exchangeId showBodyType Logs the Java type for the body of the In message showBody Log the actual contents of the body showHeaders Log all of the headers of the In message See http://camel.apache.org/log.html for more 48
  • 50. Log Examples Log Component from(“direct:incoming”).to(“log:org.apache.camel?level=INFO”).to(“jms:outgoingQueue”); Log Output Exchange[ ExchangePattern:InOut, Headers:{ breadcrumbId=ID-FusePostaMac-local-54392-1358803440276-0-9, CamelToEndpoint=bean://enrichService?method=getCreditScore, creditScore=400, LoanNumber=100001 }, BodyType:String, Body: <contents here … > ] 50
  • 51. Essential Components • File (camel-core) • Bean (camel-core) • Log (camel-core) • JMS (camel-jms) • CXF (camel-cxf) • Mock (camel-core) 51
  • 52. JMS Component (camel-jms) • Not part of camel-core, so must add additional maven dependency <dependency> <groupId>org.apache.camel<groupId> <artifactId>camel-jms</groupId> <version>${camel-version}</version> </dependency> 52
  • 53. JMS Component (camel-jms) • Used to connect to JMS compliant message broker • Endpoint URI Format • jms:[temp:][queue:|topic:]DestinationName[?options] • Configure a JmsComponent bean in Spring XML • Replace the jms: prefix with the bean name of the JmsComponent bean Example <bean id=”activemq" class=”org.apache.activemq.camel.component.ActiveMQComponent” > <property name=“brokerURL” value=“tcp://localhost:61616” /> </bean> from(“activemq:incoming”).process(…).to(“activemq:outgoing”); 53
  • 54. JMS Component (camel-jms) • Default destination is Queue from(“activemq:incoming”).process(…).to(“activemq:outgoing”); • Specify explicitly from(“activemq:queue:incoming”).process(…).to(“activemq:queue:outgoing”); • Specify Topic from(“activemq:topic:incoming”).process(…).to(“activemq:topic:outgoing”); 54
  • 55. JMS Component (camel-jms) • Pool your connections, sessions, consumers • Set up connection pool <bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> <property name="configuration" ref="jmsConfig" /> < /bean> <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration" > <property name="connectionFactory" ref="jmsPooledConnectionFactory" /> <property name="cacheLevelName" value="CACHE_CONSUMER" /> < /bean> <bean id="jmsPooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop" > <property name="maxConnections" value="2" /> <property name="connectionFactory" ref="jmsConnectionFactory" /> < /bean> 55
  • 56. JMS Component configuration options Option Default Description asyncConsumer false Process messages asynchronously concurrentConsumers 1 Number of concurrent consumers cacheLevelName CACHE_ AUTO Determines what JMS objects to cache, Connections, Sessions, Consumers, None, Auto. transacted true Use transacted sessions clientId null Unique connection ID (used for duable sub) durableSubscriptionNa null me Subscriber name for durable subscriptions disableReplyTo false Treat all messages as InOnly, ignore JMSReplyTo replyTo null Default replyTo destination Selector null Set the JMS selector timeToLive null JMS time to live See http://camel.apache.org/jms.html for more 56
  • 57. JMS Examples Multiple consumers from(“jms:incomingQueue?concurrentConsumers=5”).bean(someBean).to(“jms:outgoingQueue”); Durable Subscriber from(“jms”topic:incoming?clientId=1&durableSubscriptionName=foo1”).bean(someBean); Selectors from(“jms:incomingQueue?selector=headerName %3D „somevalue‟”).to(“jms:outgoingQueue”); Request Reply from(“direct:incoming”).inOut().to(“jms:outgoingQueue”).to(“bean:someBean”); 57
  • 58. Essential Components • File (camel-core) • Bean (camel-core) • Log (camel-core) • JMS (camel-jms) • CXF (camel-cxf) • Mock (camel-core) 58
  • 59. CXF Component (camel-cxf) • Not part of camel-core, so must add additional maven dependency <dependency> <groupId>org.apache.camel<groupId> <artifactId>camel-cxf</groupId> <version>${camel-version}</version> </dependency> 59
  • 60. CXF Component (camel-cxf) • Integrates with CXF web services framework • Consumers (expose web service), Producers (consume web service) • Endpoint URI format: • Address style: cxf:address[?options] • Bean style: cxf:bean:beanName • Address Style • No bean necessary, URI quite verbose, CXF config limited • Bean Style • 60 Compact, flexible config allows CXF interceptors, etc
  • 61. CXF bean endpoint configuration <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://camel.apache.org/schema/cxf" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd"> Service Endpoint Interface <cxf:cxfEndpoint id="helloWorldWS" wsdlURL="wsdl/HelloWorld.wsdl" WSDL definition serviceClass="org.apache.helloworld.HelloWorld" address=http://localhost:9090/helloworld serviceName=“tns:HelloService” Where to publish endpointName=“tns:SoapOverHttpEndpoint > </cxf:cxfEndpoint> from(“cxf:bean:helloWorldWS”).bean(“processWS”); 61
  • 62. CXF bean endpoint configuration • Setting the serviceClass attribute • In CXF, we set serviceClass to • • • The JAX-WS interface in web client endpoints The JAX-WS implementation class in web service endpoints because we want CXF to dispatch requests to our code In Camel routes, we set serviceClass to the JAX-WS interface for producers or consumers because we want Camel to process to requests • Using JAX-WS annotations • 62 Can omit the wsdlUrl, serviceName, and endpointName attributes from endpoint bean
  • 63. CXF Address endpoint configuration • More verbose • Clutters up the route by mixing details • Useful for testing • Cannot configure CXF details from(“cxf:http://localhost:9090/helloworld?serviceClass=org.apache.hellowo rld.HelloWorld&wsldUrl=wsdl/HelloWorld.wsdl&serviceName=tns:HelloServi ce”).bean(“processWS”); 63
  • 64. CXF Payload • The dataFormat option can have one of the following values: • POJO – arguments bound to plain old java objects • PAYLOAD – message payload <soap:body> • MESSAGE – raw message, as InputStream Address style from(“cxf:http://localhost:8080/?dataFormat=PAYLOAD”).bean(“processWS”); Bean style from(“cxf:bean:helloWorldWS”).bean(“processWS”); <cxf:cxfEndpoint id=“helloWorldWS” … > <cxf:properties> <entry key=“dataFormat” value=“MESSAGE”/> </cxf:properties> </cxf:cxfEndpoint> 64
  • 65. Essential Components • File (camel-core) • Bean (camel-core) • Log (camel-core) • JMS (camel-jms) • CXF (camel-cxf) • Mock (camel-core) 65
  • 66. Mock Component (camel-mock) • 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 • • Test • 66 Declare Assert
  • 67. Mock Component (camel-mock) • Endpoint URI format: mock:mockName[?options] • Can use just the same as any endpoint: from(“direct:incoming”) .choice() .when(header(“loanNumber”).isGreaterThan(12345)) .to(“mock:specialLoan”) .when(header(“loanNumber”).isLessThan(12345)) .to(“mock:regularLoan”) .to(“mock:outgoing”); 67
  • 68. Mock Component declare, test, assert // look up the endpoint MockEndpoint resultEndpoint = context.resolveEndpoint(“mock:outgoing”, MockEndpoint.class); // set expectations resultEndpoint.expectedMessageCount(2); // send some messages ... // assert expectations resultEndpoint.assertIsSatisfied(); 68
  • 69. Mock endpoint expectations Expectation method Description expectedMessageCount(int) The number of messages that must have come through this mock expectedMinimumMessageCount(int) The minimum number of messages that must have come to this mock expectedBodiesReceived(Object …) The list of bodies must have come through this mock expectedHeadersReceived(Object …) The list of headers that must have come through this mock expectsNoDuplicates(Expression) No duplicate messages based on the expression (usually a unique header) See http://camel.apache.org/mock.html for more 69
  • 70. Mock endpoint expectations • Can also set expectations on individual messages • mockEndpoint.message(int).body()… MockEndpoint mockEndpoint = getMockEndpoint(“mock:sink”); mockEndpoint.message(0).body(String.class).contains("John Doe"); sinkEndpoint.message(0).header("loanNumber").isEqualTo(123456); 70
  • 72. DZone Refcardz REFCARDZ • Camel Essential Components • http://refcardz.dzone.com/refcardz/essential-camel-components • Essential EIP with Apache Camel • 72 http://refcardz.dzone.com/refcardz/enterprise-integration
  • 73. Red Hat / Fuse Source 73
  • 74. 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/user-stories.html • http://camel.apache.org/user-stories.html • http://www.davsclaus.com • 74 http://camel.apache.org/articles.html http://www.christianposta.com/blog
  • 75. Camel In Action • Published 2011 • Claus Ibsen and Jon Anstey • Covers EIPs, DSL, Components, Transactions, Threading, Expressions, Error Handling, Monitoring, etc • In depth, examples, source code • Source code kept up to date! • • 75 http://code.google.com/p/camelinaction/ http://www.davsclaus.com/2013/01/camel-in-action-2years-later.html
  • 76. Contact Me  Email: christian@redhat.com ceposta@apache.org   Twitter: @christianposta  76 Blog: http://www.christianposta.com/blog Google+

Editor's Notes

  1. ESB product = something you buy and magically all of your enterprise systems can “integrate” with each otherCamel isn’t a container like tomcat, or websphere. You don’t deploy code to Camel. You deploy your code along with Camel to a Java container (or stand alone if desired)Proprietary, closed source = community driven… “free” if you will, but care must be taken to differentiate between “free as in beer” and “free as in speech” Liberal licensing, use, can package in your own products, can make changes without having to contribute back, input from everyone, etc
  2. Integration is necessary in just about any IT shop
  3. One thing any good IT department will tell you is that Integration is Hard!You have to deal with different “system vintages” both off the shelf and in house developed… Vintages = Mainframe, ETL, File based integration EAI = HubsIn house products = J2EE, EJB
  4. Windows based (.NET), Java on Linux, Web based, Fat client, Mobile!!HTTP, messaging, CORBA, COM/DCOM, EJB, RMI, custom TCP/IPPlan XML or sub categories: MISMO, Accord, SOAPJSON, Protocol Buffers, Fixed-file formats (COBOL mainframe files), HL7, CSV, EDITiming = synchronous calls over a network… either party in the integration must be availableBut that becomes difficult because often times the systems to be integrated are aligned with business units or IT units.. You don’t have control over the systems you’re integrating with, so communication between groups is crucial.. And establishing coherent communication between groups always seems to be difficult to accomplish
  5. Patterns to the rescue right?Well after the GoF book, seems like patterns are a “trend” or “hype” more than anything useful. If you do a search for software patterns on Amazon, you’re gonna come back with a large list of results, some useful some not. Patterns are useful if they can package up some useful concepts and convey them intelligently to other developers. That’s the role of patterns, to convey knowledge. Typically, they describe a specific context, go into the different forces that apply to any solution or alternative solutions, describe a concrete solution and what the trade-offs are, and are ultimately to be used for guidance. The EIP book does exactly that by formalizing 65 patterns often found when doing enterprise integration
  6. Lightweight in that it’s not an overblown, overhyped, ESB product… it’s just a set of a few java jar files that can plug into any java projectOpen source! Apache Licensed, vibrant community 700 subscribers, 45 messages per day, 24 committers, excellent response time from JIRA and mailing lists.Mediation? Router?resolve/negotiate differences between the two so they can exchange dataGives you an out of the box implementation for the EIPs described in Gregor’s bookOver 130 pre-packaged “components” for interfacing with different protocols and third-party systemsRuns in any container!
  7. Let’s take a look at a very simple integration scenario where you would like to read files from a file system and send them to a messaging system, but filter out only certain ones. Let’s only send Widget Quotes to the messaging system, and not Gadget quotes… What would something like that look like in Camel? Well, first let’s conceptualize…
  8. In plan language, we’re going to be taking “From a file system”, Filtering out the Gadgets, and “Sending to a messaging system”
  9. We can start to formalize it using some java methods… where we want to go from A and filter on a predicate, then send to B
  10. Now we are pretty close to what Camel’s DSL looks like…
  11. And now we have a camel route…The key here is that Camel routes are intended to be easy to read and comprehend. Integration is difficult, so let’s start by making certain things clear.
  12. This is actual java code. Notice the readability of the code as it expresses exactly what it’s doing.
  13. A DSL is a special purpose language for describing problem or solutions more clearly than a general purpose language (or programming language) using syntax and grammar applicable to a given domain.Examples include SQL, regex or Mathematica (for symbolic math), excel macros, etc
  14. Camel routes are built using a “Pipes and Filter” model, where smaller, well defined “filters” are connected up by “pipes” to perform a sequence of processing steps according to the business rules.For example, consider a business that accepts new orders. A requirement of the order is that it’s encrypted so nobody else can snoop it, it must contain authentication credentials so that only approved customers can place orders, and it must also be able to track and eliminate duplicate orders. We could have one piece of code that does all of this, but that would be quite inflexible. What happens if there needs to be a change and we need to check inventory before sending to “clean orders”? Using pipes and filtesr allows us to keep the filters small for flexibility, easy testing, and potential reuse. Camel routes follow this mentality.
  15. Routes are described as a series of steps that an incoming message can travel.There must an entry point to the route, and that’s where the notion of “consumers” comes in. Consumers are endpoints that Listen for incoming messages. This can be a file endpoint, jms, web service, etc. Then the message is processed by zero or more “filters”And if desired, the message can be sent along to another system using a Producer endpoint…Note the slight difference in terminology here… in web services, a provider is the web service and a consumer is the client invoking the web service. But in the case of Camel, a consumer is actually acting more like a “provider” of messages to a route. Wherease a producer is “sending messages”You can have any number of filters…
  16. import org.apache.camel.builder.RouteBuilder;/** * A Camel Java DSL Router */public class MyRouteBuilder extends RouteBuilder { /** * Let&apos;s configure the Camel routing rules using Java code... */ public void configure() { // here is a sample which processes the input files // (leaving them in place - see the &apos;noop&apos; flag) // then performs content based routing on the message using XPath from(&quot;file:src/data?noop=true&quot;) .choice() .when(xpath(&quot;/person/city = &apos;London&apos;&quot;)) .to(&quot;file:target/messages/uk&quot;) .otherwise() .to(&quot;file:target/messages/others&quot;); }}
  17. import org.apache.camel.builder.RouteBuilder;/** * A Camel Java DSL Router */public class MyRouteBuilder extends RouteBuilder { /** * Let&apos;s configure the Camel routing rules using Java code... */ public void configure() { // here is a sample which processes the input files // (leaving them in place - see the &apos;noop&apos; flag) // then performs content based routing on the message using XPath from(&quot;file:src/data?noop=true&quot;) .choice() .when(xpath(&quot;/person/city = &apos;London&apos;&quot;)) .to(&quot;file:target/messages/uk&quot;) .otherwise() .to(&quot;file:target/messages/others&quot;); }}
  18. What is a component?A component is a prepackaged extension to camel that allows you to communicate with external systems. Primary extension pointYou use it by specifying which component to use, which context (consumer or producer) you want to use it in, and then configure it specifically for what your integration needs are. The remainder of these webinar will introduce 6 often-used components and give an idea of how to use them and configure them. Camel has over 130 components, some of which are listed on the next slide…
  19. It’s a URI that describes an endpoint. Endpoints can be used to bring messages into a camel route (consumer) or send messages out from a camel route (producer). The URI has three parts a scheme which describes a component which is basically the “type” of endpointLocalpart is usually a name or path whos context (what it really means) is specific to the componentAnd options, which lets you configure a specific component.
  20. This is by no means an exhaustive list… Please see the components URL
  21. These are the components I’ll cover in this webinar.These are not listed in any kind of meaningful order. They are the components that I’ve seen used quite a bit in integration routes. There are plenty more that I wish we could have talked about, including jetty, http, twitter, drools, twitter, Amazon Web Services, etc.
  22. Let’s start by taking a look at a component that allows you to integrate with file based solutions….
  23. Interestingly enough as it is, file based integrations are still around, and will probably not go away for some time. One of the tenants of integration is that there will be different protocols and integration should be flexible enough to deal with them. This is a good example. Systems such as mainframes or other nightly batch applications tend to expect files as input. Well, there are many good file libraries out there, you could probably write a lot of file integration solutions yourself. But after doing this enough times, you’ll find that writing and reading files is largely very similar between different processes… wouldn’t you want something a little more “out of the box”? Well, that’s what you get with Camel’s components.
  24. Think for a moment about how long it would take you to write an application that does the following…An hour? A few hours?At a recent gig I was on with a large financial company, the answer was an astounding 200+ hours (including unit testing, build processes, and management approval, etc). This simple route with camel gives an idea of how packaged components can provide out of the box functionality to make your development a little easier
  25. So the File Component allows you to read or write files from and to the file system. You specify the endpoint using absolute or relative paths.Notice the URIs are as defined in the previous slide… the file component prefix followed by a path on the file system and followed by options to configure the specifics of the endpoint…
  26. By default, the file component will read all files in a given path… for each file, it will create a new message exchange that will be processed by the camel route. Keep in mind that any file or directory starting with the “.” character are ignored!File component is very configurable, as we will see some options in the next slide.
  27. A couple things to keep in mind when working with the file component are the default behaviors…
  28. Read a relative location named “inbox”, move a file to the “inprogress’ folder, process the message (sends to activeMQ) then move to .done folderDirect invocation sending a message to a file named report.txtPick up files in data folder, exclude any file starting with a _ underscore… then send the message to handleData beanSort files
  29. Let’s take a look at a component that allows you to work directly with Java Beans
  30. The bean component allows you to connect in any Plain Old Java Object into your route processing… Specifically, this component implements the “Service Activator” pattern from the EIP book which allows you to connect existing services (usually synchronous) to an integration route (could be asynchronous or synchronous). If you’re not familiar with the SA pattern, I encourage you to look it up, or look up any of the patterns that you come across using Camel. This should give you a good foundation for how to use Camel’s different component and EIP implementations.
  31. So specifically, the bean component allows you to invoke methods on your own, possibly existing, java beans. The endpoint definition follows the same pattern as all of the other components… bean: beanId and then some options.. Although not very many options for this componentCamel will automatically try to bind the parameters of the POJO method to elements of the message or message exchange…
  32. You can invoke the bean component using it as an endpoint in the “to” method… or take advantage of a more expressive Method called “bean”Either you can have the bean available in the registry (spring, jndi, osgi, etc), or you can have the route lazy create it when the route is invoked. Note, this will not create a new bean each time the route is run.. It will create it once and cache it.
  33. Continuing the example… You have a POJO class called CreditService… Camel will automatically bind the params, but in this case we’re being explicit by binding to a path in the XML payload. This expects the payload to be XML…Define the bean in spring with a bean ID of “enrich service”Then can use as an endpoint
  34. What if you don’t specify a method name??Camel is smart enough to try and figure out which method to use… though it’s probably best to specify a method name…
  35. How are the parameters bound? Magically of course, but there are some well-known types that will automatically be bound if used as parameters
  36. These are not listed in any kind of meaningful order. They are the components that I’ve seen used quite a bit in integration routes. There are plenty more that I wish we could have talked about, including jetty, http, twitter, drools, twitter, Amazon Web Services, etc.
  37. It’s a good practice to log your exchanges as they go through critical parts of a route. Under the covers, the Log Component uses SLF4J which itself delegates to log4j, java util logging, logback, or some other supported logging facility.Specifically, the log component logs interesting parts of an exchange, like headers, body, body type, properties, etc.
  38. Some questions may come up about what to use as far as the Log Component or the Log DSL. Just like Bean Component could be used as an endpoint or in a DSL method, Log offers the same options. Use the log component to log coarse parts of an exchange, or the entire exchange.Use the log dsl method to customize the log method and include simple expressionsBoth allow yout specify the logging level
  39. These are not listed in any kind of meaningful order. They are the components that I’ve seen used quite a bit in integration routes. There are plenty more that I wish we could have talked about, including jetty, http, twitter, drools, twitter, Amazon Web Services, etc.
  40. The JMS component does not belong to camel-core.. The reason why all components aren’t included is because each of these external components depends on other libraries and the classpath would become quite polluted with all of these extra dependencies and transitive dependencies…But it’s simple to add the components that you’re interested in using
  41. You can use JMS component to connect to JMS providers such as ActiveMQ, HornetQ, or commercial providers such as Websphere or Weblogic. For AMQP or MQTT protocols, there are corresponding camel components. You could connect up to ActiveMQ with either of those components as well.The URI will be just like other components, except that when you declare the JMS provider you’re going to use, you might want to use a “component” name that matches your provider. Doing so is as simple as naming your spring bean with the name you want to use in your route. For example…
  42. By default, you don’t need to specify whether you’re listening or sending to a Queue because that’s implicit if it’s left out.If you want to send to a topic, you specify that after the component name
  43. One of the things to note when using the JMS component is to cache your connections, and consumers where possible. Doing so for durable subscribers is not recommended because the JMS spec disallows multiple connections with the same clientId and durable subscription name…But to set it up correctly, instantiate a new PooledConnection Factory… by default the cache strategy will be CACHE_AUTO which would be fine because it will select CONSUMER under the covers, but I like to be explicit with this setting to make sure there is no confusion. Also, when switching to use transactions, the TX manager will use its own cache setting, and this way it will be set correctly.
  44. Please please take a look at the component documentation for JMS… there are many configuration options for tweaking the endpoint…
  45. The JMS component does not belong to camel-core.. The reason why all components aren’t included is because each of these external components depends on other libraries and the classpath would become quite polluted with all of these extra dependencies and transitive dependencies…But it’s simple to add the components that you’re interested in using
  46. Dealing with SOAP web services can be a pain in the ass, but CXF really simplifies this task. Furthermore, integrating with CXF becomes much easier with Camel. Just take note of the nomenclature differencesThere are two different ways to use the CXF component: bean or address style
  47. Let’s take a look at how to configure the cxf endpoint for the bean style of integrating with CXFAs consumer Factor out how message payloads are received into soap or rest.
  48. CXF uses WSDL to abstract away service details.Note the difference in what the “serviceClass” signifies… In CXF it depends on whether we’re a client or server.In Camel, it’s always the interface. This is because when running as a “server” or exposing it, we want camel route to provide the implementation, not a CXF impl classUsing the JAX-WS annotations helps reduce some of the XML properties that need to be configured.
  49. You could also use the address style of configuring the CXF component, but there are some drawbacks.You can already see it’s more verbose, kinda clutters up the rotue, and cannot configure CXF bus or interceptor details this way.Use for simple routes or for testing…
  50. Cant talk about CXF integration without mentioning how the payloads of a SOAP message are dealt with. For small payloads, you can consider using the POJO approach where Camel can automatically convert to your domain objects.But often times you’ll need to operate on the xml in a less resource-intenstive way… use PAYLOAD to access the soap body, or use MESSAGE for the raw input stream. You could use something like MESSAGE to send large messages, or messages with attachments. None of the extra CXF processing happens on MESSAGE data types.Note the difference in configuration…
  51. users@camel.apache.org