• Implementation of EIPs: Apache Camel provides an implementation of various Enterprise Integration Patterns (EIPs) to make the integration process easier.
• Connectivity: Camel provides connectivity to a very large variety of transports and APIs, enabling easy routing of JMS to JSON, JSON to JMS, HTTP to JMS, FTP to JMS, even HTTP to HTTP and connectivity to Microservices.
• Extensibility: Camel is extensible, and thus more endpoints can be added easily to the framework in the future.
• DSLs: Domain Specific Languages such as Java, Scala, and Groovy are used to wire EIPs and transports together.
• Typical Java Routing Rule: A typical Java routing rule may look like:
from("jms:topic:orders").to("file:data/orders");
Camel Architecture
Camel is built on top of a light-weight container, the Camel Context, which is responsible for instantiating, configuring, and connecting the different components together. Camel uses Enterprise Integration Patterns (EIPs) to define the routing rules and message processing logic. It also provides a large set of components and data formats to support integration with different technologies.
Data Formats and Type Converters
Camel supports pluggable data formats and type converters which allow for message transformation and support for multiple data formats. These formats and converters can be added and configured to best suit the requirements. Supported formats and converters include CSV, EDI, JAXB, JSON, XmlBeans, XStream, Flatpack, and Zip.
Pluggable Languages
Camel supports the use of pluggable languages to write predicates in Domain Specific Languages (DSL). This allows for complex logic to be written in a language that is most suited for the task. Supported languages include JavaScript, Groovy, Python, PHP, Ruby, SQL, XPath, and XQuery.
POJO Model
Camel also supports the pluggable POJO (Plain Old Java Object) model, so that Javabeans can be used at various points within the application. This allows for easy integration with existing code, and enables Camel to be used with existing Java libraries and frameworks.
Testing
Camel provides features which make it easier to test distributed and asynchronous systems, by using messaging. This allows for easier and faster testing of components, and allows for easy integration with other testing and debugging tools.