JMS 会话的用途是什么?

2022-09-01 17:43:22

JMS 会话的用途是什么?为什么单独的连接不足以在发送方和接收方之间交换 JMS 消息?


答案 1

我有同样的问题,这就是我来到这里的原因。在这种情况下,引用文档并不是很有帮助,因为我确信OP的问题不是如何使用会话,或者它们做什么,而是为什么它们真的存在,为什么不将它们的功能与Connection结合起来。恕我直言,这是一个元问题。

从广义上讲,会话本质上是线程对连接的视图,以下是JMS规范在访问会话时对线程和会话之间的关系的看法。

对于可以使用会话或其创建的任何对象的线程数没有限制。限制是会话的资源不应由多个线程同时使用。用户有责任确保满足此并发限制。执行此操作的最简单方法是使用一个线程。对于异步传递,请在停止模式下使用一个线程进行设置,然后启动异步传递。在更复杂的情况下,用户必须提供显式同步。

从消息传递的角度来看,它们具有逻辑工作单元。这就是为什么交易也与会话相结合的原因。

话虽如此,连接和会话之间通常会有1:1的映射。这就是为什么我认为JMSContext在2.0中引入的原因。简化事情。

看看OP的帖子的日期,我想我晚了将近十年。:D


答案 2

查看 java.sun.com

Session 对象是用于生成和使用消息的单线程上下文。尽管它可能在 Java 虚拟机 (JVM) 之外分配提供程序资源,但它被视为轻量级 JMS 对象。

会话有多种用途:

  • 它是其消息生产者和消费者的工厂。
  • 它提供提供程序优化的消息工厂。
  • 它支持一系列事务,这些事务将跨越其生产者和使用者的工作组合成原子单元。
  • 它为它使用的消息和它产生的消息定义一个串行顺序。
  • 它保留它使用的消息,直到它们被确认。
  • 它序列化向其消息使用者注册的消息侦听器的执行。

一个会话可以创建多个消息创建者和使用者并为其提供服务。

一个典型的用法是在同步 MessageConsumer 上有一个线程块,直到消息到达。然后,该线程可以使用会话的一个或多个 MessageProducers。


推荐