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