7

为什么在创建会话的连接对象是线程安全的(由线程共享)时,JMS 规范的设计方式是使会话对象不能被并发线程使用?

4

2 回答 2

7

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

于 2013-12-13T11:22:45.090 回答
7

JMS 2.0 规范

第 25 页

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

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

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

此外,如果会话已与多个异步消费者建立,重要的是客户端不会被迫处理这些单独的消费者同时执行的情况。这些限制使 JMS 更易于用于典型客户端。更复杂的客户端可以通过使用多个会话来获得他们想要的并发性。在经典 API 和特定领域的 API 中,这意味着使用多个会话对象。在简化的 API 中,这意味着使用多个 JMSContext 对象。

于 2014-02-11T11:49:19.107 回答