Session对象是用于生成和使用消息的单线程上下文.虽然它可以在Java虚拟机(JVM)之外分配提供程序资源,但它被视为轻量级JMS对象.
会话有几个目的:
会话可以创建和服务多个消息生成者和消费者.
一个典型的用法是在同步MessageConsumer上有一个线程块,直到消息到达为止.然后,线程可以使用Session的MessageProducers中的一个或多个.
我有同样的问题,这就是我在这里的原因.在这种情况下引用Doc并不是很有帮助,因为我确信OP的问题不是关于如何使用会话,或者他们做了什么,而是为什么它们确实存在,为什么不将它们的功能与Connection结合起来.恕我直言,这是一个元问题.
松散地说Sessions本质上是一个线程的连接视图,这是JMS规范在访问后者时关于线程和Session之间关系的说法.
可以使用会话或其创建的任何对象的线程数没有限制.限制是多个线程不应同时使用会话的资源.用户应确保满足此并发限制.最简单的方法是使用一个线程.在异步传送的情况下,使用一个线程在停止模式下进行设置,然后启动异步传送.在更复杂的情况下,用户必须提供显式同步.
从消息传递的角度来看,它们具有逻辑工作单元.这也是交易与Sessions结合的原因.
话虽如此,连接和会话之间通常会有1:1的映射.这就是我认为JMSContext在2.0中引入的原因.简化事情.
看看OP发布的日期,我想我差不多十年了.:d