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