Monday, April 12, 2010

Open source JMS Providers

Java Message Service is an asynchronous communication mechanism in the distributed system field. It is very helpful in the situation where the distributed components are loosely coupled. Another popular distributed communication technology is Remote Method Invocation (RMI), which is tightly coupled and requires an application to know a remote application's methods.
Java Message Service Specification

Technical Expectations:
1. Provision for Routing and delivery service
2. Support for Point-to-Point or P2P (Queue) & Publisher-Subscriber or Pub-Sub (Topics) patterns
3. Sync & Async message receipt
4. Reliability assurance
5. Built in support for common existing message formats
There are many open source JMS providers in market and they normally fulfill the above. So decision is difficult.
 I'm planning for a JMS implementation and the following are my choices. Finally, I went with ActiveMQ as reviews shows it is faster and reliable compared to the peers. Similarly good one, which I keep as alternative, is OpenMQ. Anyway, lets walk thru the list.

Apache ActiveMQ
 An open source (Apache 2.0 licensed) message broker which fully implements the Java Message Service 1.1 (JMS). It provides "Enterprise Features" like clustering, multiple message stores, and ability to use any database as a JMS persistence provider besides VM, cache, and journal persistency.
Used in ESBs like Mule and often used with Apache CXF in SOA infrastructure projects.
Integrates seamlessly into Geronimo, light weight containers and any Java application.
Apache ActiveMQ - Features
License: Apache 2.0

Open Message Queue
OpenMQ is an open source message-oriented middleware project by Sun Microsystems that implements the Java Message Service 1.1 API (JMS). In addition to support for the JMS API, OpenMQ provides additional enterprise features including clustering for scalability and high availability, a C API, and a full JMX administration API. It also includes an implementation of the Java EE Connector Architecture (JCA) called the JMSRA, that allows OpenMQ to be used by a Java EE compliant application server. OpenMQ is the default JMS provider integrated into GlassFish.
License: CCDL & GPL
Developer tips
Latest release

JBoss Messaging
JBoss/Messaging is a re-implementation of JBossMQ. Fully compatible JMS1.1 implementation. Performance characteristics to exceed JBossMQ's. One of the project tasks is to build a benchmarking infrastructure that will allow tracking of the performance metrics evolution in time, between versions, as well as comparison with equivalent metrics of similar products. High availability features, such as distributed destinations, in-memory replication of the messages and transparent client fail over. Standard JMS API to JGroups. Serverless JMS design.
On 24 August 2008, HornetQ was launched, based on the JBoss Messaging 2.0 code-base, and the JBoss Messaging project was put into bug fix mode only by JBoss.
License: LGPL


UberMQ
 is a clean-room implementation of the JMS 1.1 API (topics and queues), based on Java NIO for speed and scalability. It supports TCP, SSL and LRMP multicast connectivity, and is highly pluggable so you can customize various aspects to your needs.
Download

MantaRay
 is an Open Source serverless messaging fabric, based on peer-2-peer technology, and 100% pure Java. Features include: - Publish/subscribe (topic) and Point-to-point (queue) messaging services - Support for JMS 1.1 and 1.02 - Automatic discovery - Guaranteed message delivery - Persistent/non-persistent and durable messages - Security - Transactions support - Message filtering using selectors - Integration with WebLogic and WebSphere - TCP, UDP and HTTP transport protocols
License: GPL

Somnifugi
 is an implementation of JMS that works inside a single JVM to send JMS Messages between Threads.
License:  BSD License

HermesJMS
 is an extensible console that helps you interact with JMS providers making it easy to browse or seach queues and topics, copy messages around and delete them. It fully integrates with JNDI letting you discover administered objects stored, create JMS sessions from the connection factories and use any destinations found.
License: Apache Software License

JORAM
JORAM incorporates a 100% pure Java implementation of JMS 1.1  (Java Message Service API released by Sun Microsystem, Inc.) specification.
It provides access to a really distributed MOM (Message Oriented Middleware), built on top of the ScalAgent D.T. agents based platform.
License:    LGPL license

Open JMS
OpenJMS is an open source implementation of Sun Microsystems's Java Message Service API 1.0.2 Specification. Features include:
 * Point-to-Point and publish-subscribe messaging models
 * Guaranteed delivery of messages
 * Synchronous and asynchronous message delivery
 * Persistence using JDBC
 * Local transactions
 * Message filtering using SQL92-like selectors
 * Authentication
 * Administration GUI
 * XML-based configuration files
 * In-memory and database garbage collection
 * Automatic client disconnection detection
 * Applet support
 * Integrates with Servlet containers such as Jakarta Tomcat
 * Support for RMI, TCP, HTTP and SSL protocol stacks
 * Support for large numbers of destinations and subscribers
OpenJMS is not dependent on any given application server and therefore can be a common interface between users of different vendors.
Issue: License & still in beta phase

Reasons for my Choice with Tomcat based app: (reason from googl-ing, yet to implement)
Its generally the easiest to embed in a JVM/Tomcat, has the most features and is the fastest open source JMS server.
ActiveMQ integrates cleanly with Tomcat, JNDI and Spring.
 Useful resources:
http://activemq.org/Tomcat
http://activemq.org/JNDI+Support
http://activemq.org/Spring+Support


No comments:

Post a Comment