仅仅是我还是JMS API在如何建模事务处理和XA事务处理等效项方面不一致?

我不完全理解为什么为ConnectionFactory,QueueConnectionFactory,Session等提供XA表单以及如此多的重复:

例如

XAQueueConnection

    XAQueueSession
    createXAQueueSession() throws JMSException;

    QueueSession
    createQueueSession(boolean transacted,
                       int acknowledgeMode) throws JMSException;

包含非交易和交易会话的方法吗?
  • 为什么同时使用?
  • 如果我有XAQC,为什么要不交易的QS?
  • 如果我想要这样做,为什么还要创建XAQueueConnection?
  • 最佳答案

    这些提供了服务等级的梯度。 JMS允许...

  • 工作单元之外的消息
  • 单阶段提交(1PC)内的消息
  • 两阶段提交(2PC / XA)内的消息

  • 这些中的每一个的成本随着可靠性的程度而增加。通常,您要使用应用程序所需的成本最低的方法。如果您有一条非永久性的,即将到期的“即发即弃”消息(例如,股票行情事件),将其放在工作单元中是浪费的。同样,如果您需要事务处理会话,但JMS是唯一的资源管理器,那么XA就是浪费。

    另一方面,如果您确实需要XA进行某些操作,那并不意味着您随后应将XA用于所有操作。例如,您可能有一个连接,在其中一个XA事务维护一个会话,为非XA消息传递维护另一个会话。首先是接收对长时间运行的流程的请求,并使用流程详细信息更新数据库。另一个会话用于发送定期状态更新。该连接必须是XAConnection,但是出于性能目的,您需要在其下面同时具有XA和非XA会话。您也可以维护单独的连接,但是此方法允许您在单个连接中执行XA和非XA消息传递。对于具有许多连接的经纪人,此优化至关重要。

    诚然,这不是一个很常见的用例,但它仍然是有效的用例,并且足够有用,可以包含在规范中。

    10-08 13:07
    查看更多