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.

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

Correlation Identifier How does a requestor that has received a reply know which request this is the reply for?

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?
Recipient List How do we route a message to a list of 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?
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?

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?
Normalizer How do you process messages that are semantically equivalent, but arrive in a different format?

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

Wire Tap How do you inspect messages that travel on a point-to-point channel?

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[?methodName=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).
CXF / camel-cxf
cxf:address[?serviceClass=...]
Working with Apache CXF for web 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
Direct invocation of the consumer from the producer so that single threaded (non-SEDA) in VM invocation is performed
Esper / camel-esper in camel-extra
esper:name
Working with the Esper Library for Event Stream Processing
Event / camel-spring
event://default
Working with Spring ApplicationEvents
File / camel-core
file://nameOfFileOrDirectory
Sending messages to a file or polling a file or directory
FIX / camel-fix in FUSE
fix://configurationResource
Sends or receives messages using the FIX protocol
Flatpack / camel-flatpack
flatpack:[fixed|delim]:configFile
Processing fixed width or delimited files or messages using the FlatPack library
FTP / camel-ftp
ftp://host[:port]/fileName
Sending and receiving files over FTP
Hibernate / camel-hibernate in camel-extra
hibernate://entityName
For using a database as a queue via the Hibernate 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 in FUSE
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
List / camel-core
list: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.
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
MSMQ / camel-msmq in FUSE
msmq:msmqQueueName
Sending and receiving messages with Microsoft Message Queuing
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
Pojo / camel-core
pojo:name
Deprecated. It is now an alias to the Bean component.
POP / camel-mail
pop3://user-info@host:port
Receiving email using POP3 and JavaMail
Quartz / camel-quartz
quartz://groupName/timerName
Provides a scheduled delivery of messages using the Quartz scheduler
Queue / camel-core
queue:name
Deprecated.  It is now an alias to the SEDA component.
Ref / camel-core
ref:name
Component for lookup of existing endpoints bound in the Registry.
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
SEDA / camel-core
seda:name
Used to deliver messages to a java.util.concurrent.BlockingQueue, useful when creating SEDA style processing pipelines within the same CamelContext
SFTP / camel-ftp
sftp://host[:port]/fileName
Sending and receiving files over SFTP
SMTP / camel-mail
smtp://user-info@host[:port]
Sending email using SMTP and JavaMail
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
Used to deliver messages to a java.util.concurrent.BlockingQueue, useful when creating SEDA style processing pipelines within 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