If the connection represents a communication channel between the client and the broker, a session marks a single conversation between them. Mainly, you use a session object to create messages, message producers, and message consumers. When you create a session, you configure reliable delivery through a number of acknowledgement options or through transactions. For more information, see Reliable Message Delivery.
According to the JMS specification, a session is a single-threaded context for producing and consuming messages. You can create multiple message producers and consumers for a single session, but you are restricted to using them serially. The threading implementation varies slightly for Java and C clients. Consult the appropriate developer’s guide for additional information about threading implementation and restrictions.
You can also use a session object to do the following:
Create and configure destinations for those clients that do not use administered objects to obtain references to existing destinations.
Create and configure temporary topics and queues; these are used as part of the request-reply pattern. See The Request-Reply Pattern.
Support transaction processing.
Define a serial order for producing or consuming messages.
Serialize the execution of message listeners for asynchronous consumers (see Consuming a Message).
Define when messages are considered processed.