The Apache Camel project has been designed to work easily with ActiveMQ - and comes embedded in both the clients and the broker from ActiveMQ 5.0 onwards.

Apache Camel supports an extensive range of integration patterns to make integration very simple! :

Enterprise Integration Patterns

Camel supports most of the Enterprise Integration Patterns from the excellent book by Gregor Hohpe and Bobby Woolf.

If you are new to Camel you might want to try the Getting Started in the User Guide before attempting to implement these patterns.

The EIP icons library is available as a Visio stencil file adapted to render the icons with the Camel color : sand. Download it here for your presentation, functional and technical analysis documents. The original EIP stencil is also available in OpenOffice 3.x Draw (thanks to Marco Garbelini) , Microsoft Visio, or Omnigraffle.

Messaging Systems

Message Channel How does one application communicate with another using messaging?
Message How can two applications connected by a message channel exchange a piece of information?
Pipes and Filters How can we perform complex processing on a message while maintaining independence and flexibility?
Message Router How can you decouple individual processing steps so that messages can be passed to different filters depending on a set of conditions?
Message Translator How can systems using different data formats communicate with each other using messaging?
Message Endpoint How does an application connect to a messaging channel to send and receive messages?

Messaging Channels

Point to Point Channel How can the caller be sure that exactly one receiver will receive the document or perform the call?
Publish Subscribe Channel How can the sender broadcast an event to all interested receivers?
Dead Letter Channel What will the messaging system do with a message it cannot deliver?
Guaranteed Delivery How can the sender make sure that a message will be delivered, even if the messaging system fails?
Message Bus What is an architecture that enables separate applications to work together, but in a de-coupled fashion such that applications can be easily added or removed without affecting the others?

Message Construction

Event Message How can messaging be used to transmit events from one application to another?
Request Reply When an application sends a message, how can it get a response from the receiver?
Correlation Identifier How does a requestor that has received a reply know which request this is the reply for?
Return Address How does a replier know where to send the reply?

Message Routing

Content Based Router How do we handle a situation where the implementation of a single logical function (e.g., inventory check) is spread across multiple physical systems?
Message Filter How can a component avoid receiving uninteresting messages?
Dynamic Router How can you avoid the dependency of the router on all possible destinations while maintaining its efficiency?
Recipient List How do we route a message to a list of (static or dynamically) specified recipients?
Splitter How can we process a message if it contains multiple elements, each of which may have to be processed in a different way?
Aggregator How do we combine the results of individual, but related messages so that they can be processed as a whole?
Resequencer How can we get a stream of related but out-of-sequence messages back into the correct order?
Composed Message Processor How can you maintain the overall message flow when processing a message consisting of multiple elements, each of which may require different processing?
Scatter-Gather How do you maintain the overall message flow when a message needs to be sent to multiple recipients, each of which may send a reply?
Routing Slip How do we route a message consecutively through a series of processing steps when the sequence of steps is not known at design-time and may vary for each message?
Throttler How can I throttle messages to ensure that a specific endpoint does not get overloaded, or we don't exceed an agreed SLA with some external service?
Delayer How can I delay the sending of a message?
Load Balancer How can I balance load across a number of endpoints?
Multicast How can I route a message to a number of endpoints at the same time?
Loop How can I repeat processing a message in a loop?

Message Transformation

Content Enricher How do we communicate with another system if the message originator does not have all the required data items available?
Content Filter How do you simplify dealing with a large message, when you are interested only in a few data items?
Claim Check How can we reduce the data volume of message sent across the system without sacrificing information content?
Normalizer How do you process messages that are semantically equivalent, but arrive in a different format?
Sort How can I sort the body of a message?

Messaging Endpoints

Messaging Mapper How do you move data between domain objects and the messaging infrastructure while keeping the two independent of each other?
Event Driven Consumer How can an application automatically consume messages as they become available?
Polling Consumer How can an application consume a message when the application is ready?
Competing Consumers How can a messaging client process multiple messages concurrently?
Message Dispatcher How can multiple consumers on a single channel coordinate their message processing?
Selective Consumer How can a message consumer select which messages it wishes to receive?
Durable Subscriber How can a subscriber avoid missing messages while it's not listening for them?
Idempotent Consumer How can a message receiver deal with duplicate messages?
Transactional Client How can a client control its transactions with the messaging system?
Messaging Gateway How do you encapsulate access to the messaging system from the rest of the application?
Service Activator How can an application design a service to be invoked both via various messaging technologies and via non-messaging techniques?

System Management

Detour How can you route a message through intermediate steps to perform validation, testing or debugging functions?
Wire Tap How do you inspect messages that travel on a point-to-point channel?

Resources

  Name Size Creator (Last Modifier) Creation Date Last Mod Date Comment  
ZIP Archive Hohpe_EIP_camel.zip 191 kB Charles Moulliard Apr 20, 2009 Apr 20, 2009   Edit | Remove

It also supports a wide range of transport binding components:

Components Supported

Camel supports the following Component implementations via URIs.

Component / ArtifactId / URI Description
ActiveMQ / activemq-camel
activemq:[topic:]destinationName
For JMS Messaging with Apache ActiveMQ
ActiveMQ Journal / activemq-core
activemq.journal:directory-on-filesystem
Uses ActiveMQ's fast disk journaling implementation to store message bodies in a rolling log file
AMQP / camel-amqp
amqp:[topic:]destinationName
For Messaging with AMQP protocol
Atom / camel-atom
atom:uri
Working with Apache Abdera for atom integration, such as consuming an atom feed.
Bean / camel-core
bean:beanName[?method=someMethod]
Uses the Bean Binding to bind message exchanges to beans in the Registry. Is also used for exposing and invoking POJO (Plain Old Java Objects).
Browse / camel-core
browse:someName
Provdes a simple BrowsableEndpoint which can be useful for testing, visualisation tools or debugging. The exchanges sent to the endpoint are all available to be browsed.
Cache / camel-cache
cache://cachename[?options]
The cache component facilitates creation of caching endpoints and processors using EHCache as the cache implementation.
Cometd / camel-cometd
cometd://host:port/channelname
Used to deliver messages using the jetty cometd implementation of the bayeux protocol
CXF / camel-cxf
cxf:address[?serviceClass=...]
Working with Apache CXF for web services integration
CXFRS / camel-cxf
cxfrs:address[?resourcesClasses=...]
Working with Apache CXF for REST services integration
DataSet / camel-core
dataset:name
For load & soak testing the DataSet provides a way to create huge numbers of messages for sending to Components or asserting that they are consumed correctly
Direct / camel-core
direct:name
Synchronous call to another endpoint
Esper / camel-esper in camel-extra
esper:name
Working with the Esper Library for Event Stream Processing
Event / camel-spring
event://default
spring-event://default
Working with Spring ApplicationEvents
File / camel-core
file://nameOfFileOrDirectory
Sending messages to a file or polling a file or directory. Camel 1.x use this link File.
Flatpack / camel-flatpack
flatpack:[fixed|delim]:configFile
Processing fixed width or delimited files or messages using the FlatPack library
Freemarker / camel-freemarker
freemarker:someTemplateResource
Generates a response using a Freemarker template
FTP / camel-ftp
ftp://host[:port]/fileName
Sending and receiving files over FTP. Camel 1.x use this link FTP.
Hibernate / camel-hibernate in camel-extra
hibernate://entityName
For using a database as a queue via the Hibernate library
HL7 / camel-hl7
mina:tcp://hostname[:port]
For working with the HL7 MLLP protocol and the HL7 model using the HAPI library
HTTP / camel-http
http://hostname[:port]
For calling out to external HTTP servers
iBATIS / camel-ibatis
ibatis://sqlOperationName
Performs a query, poll, insert, update or delete in a relational database using Apache iBATIS
IMap / camel-mail
imap://hostname[:port]
Receiving email using IMap
IRC / camel-irc
irc:host[:port]/#room
For IRC communication
JavaSpace / camel-javaspace
javaspace:jini://host?spaceName=mySpace?...
Sending and receiving messages through JavaSpace
JBI / servicemix-camel
jbi:serviceName
For JBI integration such as working with Apache ServiceMix
JCR / camel-jcr
jcr://user:password@repository/path/to/node
Storing a message in a JCR (JSR-170) compliant repository like Apache Jackrabbit
JDBC / camel-jdbc
jdbc:dataSourceName?options
For performing JDBC queries and operations
Jetty / camel-jetty
jetty:url
For exposing services over HTTP
JMS / camel-jms
jms:[topic:]destinationName
Working with JMS providers
JPA / camel-jpa
jpa://entityName
For using a database as a queue via the JPA specification for working with OpenJPA, Hibernate or TopLink
JT/400 / camel-jt400
jt400://user:pwd@system/<path_to_dtaq>
For integrating with data queues on an AS/400 (aka System i, IBM i, i5, ...) system
LDAP / camel-ldap
ldap:host[:port]?base=...[&scope=<scope>]
Performing searches on LDAP servers (<scope> must be one of object|onelevel|subtree)
Log / camel-core
log:loggingCategory[?level=ERROR]
Uses Jakarta Commons Logging to log the message exchange to some underlying logging system like log4j
Mail / camel-mail
mail://user-info@host:port
Sending and receiving email
MINA / camel-mina
[tcp|udp|multicast]:host[:port]
Working with Apache MINA
Mock / camel-core
mock:name
For testing routes and mediation rules using mocks
MSV / camel-msv
msv:someLocalOrRemoteResource
Validates the payload of a message using the MSV Library
Multicast / camel-mina
multicast://host:port
Working with TCP protocols using Apache MINA
POP / camel-mail
pop3://user-info@host:port
Receiving email using POP3 and JavaMail
Printer / camel-printer
lpr://host:port/path/to/printer[?options]
The printer component facilitates creation of printer endpoints to local, remote and wireless printers. The endpoints provide the ability to print camel directed payloads when utilized on camel routes.
Quartz / camel-quartz
quartz://groupName/timerName
Provides a scheduled delivery of messages using the Quartz scheduler
Ref / camel-core
ref:name
Component for lookup of existing endpoints bound in the Registry.
Restlet / camel-restlet
restlet:restletUrl[?options]
Component for consuming and producing Restful resources using Restlet
RMI / camel-rmi
rmi://host[:port]
Working with RMI
RNC / camel-jing
rnc:/relativeOrAbsoluteUri
Validates the payload of a message using RelaxNG Compact Syntax
RNG / camel-jing
rng:/relativeOrAbsoluteUri
Validates the payload of a message using RelaxNG
RSS / camel-rss
rss:uri
Working with ROME for RSS integration, such as consuming an RSS feed.
SEDA / camel-core
seda:name
Asynchronous call to another endpoint in the same Camel Context
SERVLET / camel-servlet
servlet:uri
For exposing services over HTTP through the servlet which is deployed into the Web container.
SFTP / camel-ftp
sftp://host[:port]/fileName
Sending and receiving files over SFTP
Smooks / camel-smooks in camel-extra
unmarshal(edi)
For working with EDI parsing using the Smooks library
SMTP / camel-mail
smtp://user-info@host[:port]
Sending email using SMTP and JavaMail
SNMP / camel-snmp
snmp://host[:port]?options
Polling OID values and receiving traps using SNMP via SNMP4J library
SpringIntegration / camel-spring-integration
spring-integration:defaultChannelName
The bridge component of Camel and Spring Integration
SQL / camel-sql
sql:select * from table where id=#
Performing SQL queries using JDBC
Stream / camel-stream
stream:[in|out|err|file]
Read or write to an input/output/error/file stream rather like unix pipes
StringTemplate / camel-stringtemplate
string-template:someTemplateResource
Generates a response using a String Template
TCP / camel-mina
tcp://host:port
Working with TCP protocols using Apache MINA
Test / camel-spring
test:expectedMessagesEndpointUri
Creates a Mock endpoint which expects to receive all the message bodies that could be polled from the given underlying endpoint
Timer / camel-core
timer://name
A timer endpoint
UDP / camel-mina
udp://host:port
Working with UDP protocols using Apache MINA
Validation / camel-spring
validation:someLocalOrRemoteResource
Validates the payload of a message using XML Schema and JAXP Validation
Velocity / camel-velocity
velocity:someTemplateResource
Generates a response using an Apache Velocity template
VM / camel-core
vm:name
Asynchronous call to another endpoint in the same JVM
XMPP / camel-xmpp
xmpp://host:port/room
Working with XMPP and Jabber
XQuery / camel-saxon
xquery:someXQueryResource
Generates a response using an XQuery template
XSLT / camel-spring
xslt:someTemplateResource
Generates a response using an XSLT template

See Also

Graphic Design By Hiram