Create multiple Competing Consumers on a single channel so that the consumers can process multiple messages concurrently.
Use a Durable Subscriber to make the messaging system save messages published while the subscriber is disconnected.
The application should use an Event-Driven Consumer, one that is automatically handed messages as they’re delivered on the channel.
Design a receiver to be an Idempotent Receiver--one that can safely receive the same message multiple times.
Create a Message Dispatcher on a channel that will consume messages from a channel and distribute them to performers.
Connect an application to a messaging channel using a Message Endpoint, a client of the messaging system that the application can then use to send or receive messages.
Use a Messaging Gateway, a class than wraps messaging-specific method calls and exposes domain-specific methods to the application.
Create a separate Messaging Mapper that contains the mapping logic between the messaging infrastructure and the domain objects. Neither the objects nor the infrastructure have knowledge of the Messaging Mapper's existence
The aplication should use a Polling Consumer, one that explicitly makes a call when it wants to receive a message.
Make the consumer a Selective Consumer, one that filteres the messages delivered by its channel so that it only receives the ones that match its criteria.
Design a Service Activator that connects the messages on the channel to the service being accessed.
Use a Transactional Client—make the client’s session with the messaging system transactional so that the client can specify transaction boundaries.