Key concepts for correlator-integrated messaging for JMS
The key JMS concepts when implementing an Apama application with correlator-integrated messaging are connections, receivers, and senders.
JMS connections
To use JMS you must configure one or more named connections to the JMS broker. If you need to connect to multiple separate JMS broker instances (which may be using the same JMS provider/vendor or different ones) you need a connection for each; it's also possible to add multiple connections for the same broker (for example, for rare cases where it improves performance scalability). In Software AG Designer, you can select from a variety of JMS providers that come with default connection configurations.
JMS receivers
A receiver is a single-threaded context for receiving messages from a single JMS queue or topic (with a single JMS Session and MessageConsumer object). A connection to a JMS broker can be configured with any number of receivers. Many, but not all, JMS providers support creating multiple receivers for a single queue (or in some cases, topic) either to scale throughput performance, or when using JMS "message selectors" to partition the messages on a destination.
JMS senders
A sender is a single-threaded context for sending messages (with a single JMS Session and MessageProducer object). A connection to a JMS broker can be configured with any number of senders. You can add any number of senders, but by default if no senders are explicitly configured, a single sender called "default" will be created implicitly. Each sender can send messages to any JMS destination (a queue or topic); the destination is specified on a per-message basis in the mapping rule set (either hardcoded by specifying a constant value per message type in the mapping rules or mapped from a destination field in the apama event). Messages sent by a single sender with the same JMS headers ("priority" for example) will usually be delivered in order by the provider (although this may not be the case if there is a failure), but the ordering of sends across senders is undefined. Multiple senders can be created for a single connection to scale throughput performance, or for sending messages with different senderReliability modes. Each sender is represented by its own correlator output channel.