【发布时间】:2011-02-10 19:18:52
【问题描述】:
JMS 会话的目的是什么?为什么仅一个连接不足以在发送方和接收方之间交换 JMS 消息?
【问题讨论】:
JMS 会话的目的是什么?为什么仅一个连接不足以在发送方和接收方之间交换 JMS 消息?
【问题讨论】:
Session 对象是用于产生和使用消息的单线程上下文。尽管它可以在 Java 虚拟机 (JVM) 之外分配提供者资源,但它被视为轻量级 JMS 对象。
会话有多种用途:
一个会话可以创建和服务多个消息生产者和消费者。
一个典型的用途是在消息到达之前在同步 MessageConsumer 上设置一个线程块。然后线程可以使用一个或多个 Session 的 MessageProducers。
【讨论】:
我也有同样的问题,这就是我来到这里的原因。在这种情况下,引用文档并不是很有帮助,因为我确信 OP 的问题不是关于如何使用会话,或者它们做什么,而是它们为什么真的存在,为什么不将它们的功能与 Connection 结合起来。恕我直言,这是一个元问题。
简单地说,会话本质上是线程对连接的看法,以下是 JMS 规范在访问线程和会话时必须说明的内容。
对于可以使用会话或其创建的任何对象的线程数没有限制。限制是会话的资源不应由多个线程同时使用。由用户确保满足此并发限制。最简单的方法是使用一个线程。异步投递的情况下,使用一个线程在stopped模式下设置,然后开始异步投递。在更复杂的情况下,用户必须提供显式同步。
从消息传递的角度来看,它们拥有一个逻辑工作单元。这就是 Transactions 也与 Sessions 耦合的原因。
话虽如此,连接和会话之间通常会存在 1:1 映射。这就是为什么我认为 JMSContext 是在 2.0 中引入的。把事情简单化。
看看 OP 的发布日期,我想我迟到了将近十年。 :D
【讨论】: