Mule is a messaging platform based on ideas from Enterprise Service
Bus (ESB) architectures. An ESB works by acting as a sort of transit
system for carrying data between applications within or outside your
intranet. The ESB defines a series of stops, or "endpoints", through
which applications can send or receive data onto or from the system.
The heart of the system, the messaging bus, is what routes messages
between endpoints. The messaging backbone of the ESB is usually
implemented using JMS, but any other message server implementation
could be used, such as MSMQ, IBM WebsphereMQ (and earlier versions know
as MQ Series) or TIBCO Rendezvous.
Mule, in fact, goes beyond the typical definition of an ESB. We
prefer to define Mule as a light-weight messaging framework that
contains a distributable object broker for managing communication
between applications. The point of the object broker is to manage
service components. These components are called Universal Message
Objects or UMOs, and are basically just plain old java objects (POJO).
UMOs can exist in the same VM or can be scattered around your network
and the Internet. The object broker itself follows a Staged Event Driven Architecture
or SEDA design pattern. All communication between UMOs and other
applications is made through message endpoints. These endpoints provide
a simple and consistent interface to vastly disparate technologies such
as JMS, SMTP, JDBC, TCP, HTTP, XMPP, file, etc.
The diagram below shows a common scenario with Mule. Mule
applications usually consist of many Mule instances across the network.
Each instance is a light-weight container that hosts one or more UMO
component. Each UMO component will have one or more endpoints that it
will send and receive events through.