Chapter 2. Architecture

Table of Contents

Routing Domain Specific Language (DSL)Xml Configurationrouting and mediation rulesCamelContextEnterprise Integration Patterns

At a high level Camel consists of a CamelContext which contains a collection of Component instances. A Component is essentially a factory of Endpoint instances. You can explicitly configure Component instances in Java code or an IoC container like Spring or Guice, or they can be auto-discovered using URIs.

An Endpoint acts rather like a URI or URL in a web application or a Destination in a JMS system; you can communicate with an endpoint; either sending messages to it or consuming messages from it. You can then create a Producer or Consumer on an Endpoint to exchange messages with it.

The DSL makes heavy use of pluggable Languages to create an Expression or Predicate to make a truly powerful DSL which is extensible to the most suitable language depending on your needs. The following languages are supported

Camel makes extensive use of URIs to allow you to refer to endpoints which are lazily created by a Component if you refer to them within Routes

ComponentURIDescription
ActiveMQ
activemq:[topic:]destinationName
For JMS Messaging with Apache ActiveMQ
CXF
cxf:serviceName
Working with Apache CXF for web services integration
Direct
direct:name
Direct invocation of the consumer from the producer so that single threaded (non-SEDA) in VM invocation is performed
File
file://nameOfFileOrDirectory
Sending messages to a file or polling a file or directory
FTP
ftp://host[:port]/fileName
Sending and receiving files over FTP
HTTP
http://hostname[:port]
Working with the HTTP protocol either consuming requests over HTTP or consuming external RESTful resources
IMap
imap://hostname[:port]
Receiving email using IMap
IRC
irc:host[:port]/#room
For IRC communication
JBI
jbi:serviceName
For JBI integration such as working with Apache ServiceMix
JMS
jms:[topic:]destinationName
Working with JMS providers
JPA
jpa://entityName
For using a database as a queue via the JPA specification for working with OpenJPA, Hibernate or TopLink
Mail
mail://user-info@host:port
Sending and receiving email
MINA
[tcp|udp|multicast]:host[:port]
Working with Apache MINA
Multicast
multicast://host:port
Working with TCP protocols using Apache MINA
Mock
mock:name
For testing routes and mediation rules using mocks
Pojo
pojo:name
Exposing and invoking a POJO
POP
pop3://user-info@host:port
Receiving email using POP3 and JavaMail
Quartz
quartz://groupName/timerName
Provides a scheduled delivery of messages using the Quartz scheduler
Queue
queue:name
Used to deliver messages to a java.util.Queue, useful when creating SEDA style processing pipelines
RMI
rmi://host[:port]
Working with RMI
SFTP
sftp://host[:port]/fileName
Sending and receiving files over SFTP
SMTP
smtp://user-info@host[:port]
Sending email using SMTP and JavaMail
Timer
timer://name
A timer endpoint
TCP
tcp://host:port
Working with TCP protocols using Apache MINA
UDP
udp://host:port
Working with UDP protocols using Apache MINA
XMPP
xmpp://host:port/room
Working with XMPP and Jabber
WebDAV
webdav://host[:port]/fileName
Sending and receiving files over WebDAV

For a full details of the individual components see the Component Appendix