【问题标题】:Why JMS Session Object is not thread safe?为什么 JMS 会话对象不是线程安全的?
【发布时间】:2013-12-31 21:16:15
【问题描述】:

为什么 JMS 规范的设计方式是,当创建 Session 的 Connection 对象是线程安全的(由线程共享)时,并发线程不能使用 Session 对象?

【问题讨论】:

    标签: java jms jms2


    【解决方案1】:

    JMS 会话对象通常用于事务。我们都知道事务是线程特定的,不能跨线程。因此,事务处理的 JMS 会话不能跨线程使用。我相信出于这个原因,JMS 规范说会话不是线程安全的。

    【讨论】:

    • 有趣的解释+1
    【解决方案2】:

    JMS 2.0 规范

    第 25 页

    限制对会话的并发访问有两个原因。

    首先,会话是支持事务的 JMS 实体。它是 实现多线程事务非常困难。

    第二,会话支持异步消息消费。它是 重要的是 JMS 不需要客户端代码用于异步 消息消费能够处理多个,并发 消息。

    另外,如果一个会话已经设置了多个, 异步消费者,重要的是不强制客户端 处理这些单独的消费者同时存在的情况 执行。这些限制使 JMS 更容易用于典型的 客户。更复杂的客户端可以获得他们的并发性 希望通过使用多个会话。在经典 API 和 特定于域的 API 这意味着使用多个会话对象。在里面 简化 API 这意味着使用多个 JMSContext 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 2013-10-11
      • 2020-10-10
      • 1970-01-01
      • 2015-04-23
      • 2016-08-14
      相关资源
      最近更新 更多