22.12.11

ActiveMQ in Action

  • Enterprise message queuing is a concept that is not well understood by most software developers.
That's true.
  • ActiveMQ project has been successful in this endeavor by creating a MOM that is easy to install, administer, and utilize, while providing a large number of unique features.
I am curious of these unique features. And I hope the author could give me a list and ensure me understand why they are unique. Here is a link from ActiveMQ's website:
  • Apache ActiveMQ ™ -- Features
    • Active Groups
      • Active Groups is a dynamic collaboration framework so simplify message passing and shared state between members of the group. It is available in ActiveMQ 6.0
    • ActiveMQ Real Time
      • ActiveMQ Real Time is a sub-project of the popular Apache ActiveMQ messaging system but is designed specifically to meet the needs for low latency high throughput collaborative real-time applications.
    • Clustering
      • Clustering is a large area and often means different things to different people. 
      • We'll try to list the various aspects of clustering and how they relate to ActiveMQ
    • Command Agent
      • From 4.2 onwards Apache ActiveMQ allows you to communicate with a broker Command Agent to be able to perform administration queries and commands. This allows you to use the message bus itself to communicate with the message broker to list available queues, topics, subscriptions, to view metadata, browse queues and so forth.
    • Consumer Features
    • Destination Features
      • Composite Destinations
      • Configure Startup Destinations
      • Delete Inactive Destinations
      • Destination Options
      • Mirrored Queues
      • Per Destination Policies
      • Virtual Destinations
      • Wildcards
    • Discovery
      • ActiveMQ uses an abstraction called a Discovery Agent to detect remote services such as remote brokers. We can use discovery for JMS clients to auto-detect a Message Broker to connect to, or to provide Networks of Brokers
      • There are currently two kinds of discovery agent.
    • Enterprise Integration Patterns
    • Features Overview
      • Supports a variety of Cross Language Clients and Protocols from Java, C, C++, C#, Ruby, Perl, Python, PHP
      • full support for the Enterprise Integration Patterns both in the JMS client and the Message Broker
      • Supports many advanced features such as Message Groups, Virtual Destinations, Wildcards and Composite Destinations
      • Fully supports JMS 1.1 and J2EE 1.4 with support for transient, persistent, transactional and XA messaging
      • Spring Support so that ActiveMQ can be easily embedded into Spring applications and configured using Spring's XML configuration mechanism
      • Tested inside popular J2EE servers such as Geronimo, JBoss 4, GlassFish and WebLogic
      • Includes JCA 1.5 resource adaptors for inbound & outbound messaging so that ActiveMQ should auto-deploy in any J2EE 1.4 compliant server
      • Supports pluggable transport protocols such as in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports
      • Supports very fast persistence using JDBC along with a high performance journal
      • Designed for high performance clustering, client-server, peer based communication
      • REST API to provide technology agnostic and language neutral web based API to messaging
      • Ajax to support web streaming support to web browsers using pure DHTML, allowing web browsers to be part of the messaging fabric
      • CXF and Axis Support so that ActiveMQ can be easily dropped into either of these web service stacks to provide reliable messaging
      • Can be used as an in memory JMS provider, ideal for unit testing JMS
    • Horizontal Scaling
      • Scaling to tens of thousands of Queues in a single broker is relatively straightforward - but requires some configuration changes from the default.
    • Interceptors
      • ActiveMQ has a sophisticated interceptor stack so that you can attach whatever functionality you require into the broker in an easy way without complicating all of the other broker code. This has really helped us keep the code clean and modular while offering powerful extension points.
    • JMSUserID
      • It is sometimes useful to know the authenticated username of the sender of a message. This is not added by default but you can enable it by setting thepopulateJMSXUserID property on the broker via Java code
    • JMX
      • Apache ActiveMQ has extensive support for JMX to allow you to monitor and control the behavior of the broker via the JMX MBeans.
    • Logging a warning if you forget to start a Connection
      • A very common gotcha when working with JMS is forgetting to start the JMS connection, creating a consumer and not having it receive any messages. I myself have tripped up over this one many many times!
    • MDC Logging
      • As of version 5.5.0, ActiveMQ uses slf4j as the logging framework. This allows us to support MDC logging.
    • Message Dispatching Features
      • Async Sends
      • Dispatch Policies
      • Message Cursors
      • Optimized Acknowledgement
      • Producer Flow Control
      • Total Ordering
    • Message Features
      • ActiveMQ Message Properties
      • Advisory Message
      • Blob Messages
      • Delay and Schedule Message Delivery
      • JMS Streams
      • Message Transformation
      • Structured Message Properties and MapMessages
    • New Features
      • This page documents the various new features we add in each major release
      • New Features in 6.0
      • New Features in 5.5
      • New Features in 5.4
      • New Features in 5.2
      • New Features in 5.1
      • New Features in 5.0
      • New Features in 4.1
      • New Features in 4.0
    • Performance
      • Performance differs greatly depending on many different factors
        • the network topology
        • transport protocols used
        • quality of service
        • hardware, network, JVM and operating system
        • number of producers, number of consumers
        • distribution of messages across destinations along with message size
      • To give you an idea of the kinds of performance you can expect from ActiveMQ we have a bunch of JMeter Performance Tests that you can run on your hardware with the protocols of your choice.
    • Persistence
    • Scaling the Depth of a Queue
      • Nearly all messaging systems (certainly open source ones) hold either a copy of a persistent message or a reference to a persisted message in memory. This is primarily to try and improve performance, but it also can significantly decrease the complexity of implementation. In fact ActiveMQ version 4 and below worked this - way - by holding references to persisted messages in memory.
    • Security
      • ActiveMQ 4.x and greater provides pluggable security through various different providers.
      • The most common providers are
        • JAAS for authentication
        • a default authorization mechanism using a simple XML configuration file.
    • The JMS Connector
    • The Proxy Connector
      • Many of the more advanced ActiveMQ features are implemented in the transports. Sometimes it's desirable to accept one kind of ActiveMQ connection and establish a different kind of connection to another broker. The Proxy Connector allows you to do that by accepting connection on one transport and establishing new connections using a different transport and then just proxying all the commands sent between the two transports.
    • Unix
    • URI Protocols
      • ActiveMQ is designed to support mutliple different topologies and protocols. Which one you use depends on your messaging requirements, quality of service and network topology.
      • The following table describes the different network protocols available along with showing the connection URL string you use to enable this communication protocol. You can specify the connection URL on anActiveMQConnectionFactory (in a constructor or via the brokerURL property).
    • Visualisation

No comments: