用于JMS和DB操作的XA或非XA
我对XA和非XA世界相当陌生。我的要求是从队列中读取消息,直到没有消息为止。对于队列中的每条消息,转到DB并执行一些事务,如select、insert、update 这是否可以使用非XA数据源实现?我目前正在使用XA数据源,但了解到它成本高昂且性能受到影响用于JMS和DB操作的XA或非XA,jms,websphere,rad,xa,Jms,Websphere,Rad,Xa,我对XA和非XA世界相当陌生。我的要求是从队列中读取消息,直到没有消息为止。对于队列中的每条消息,转到DB并执行一些事务,如select、insert、update 这是否可以使用非XA数据源实现?我目前正在使用XA数据源,但了解到它成本高昂且性能受到影响 谢谢你的帮助!谢谢如果您需要在事务中包括与JMS连接的交互(即发送或接收消息)以及使用db连接连接数据库,那么您肯定需要XA数据源,因为您的事务是 在两阶段提交事务中,您要么将更改提交到所有资源(在您的示例中是JMS和DB资源),要么在任何一
谢谢你的帮助!谢谢如果您需要在事务中包括与JMS连接的交互(即发送或接收消息)以及使用db连接连接数据库,那么您肯定需要XA数据源,因为您的事务是 在两阶段提交事务中,您要么将更改提交到所有资源(在您的示例中是JMS和DB资源),要么在任何一个资源出现问题时回滚所有更改 为此,您需要连接到启用XA的数据源。
此外,在Java EE容器中,JMS连接应该已经启用XAXA保证一条消息匹配1个且仅匹配1个DB事务。 让我们想想没有XA会发生什么(只是许多可能情况中的一种):
- 步骤1:提交DB事务
- 步骤2:提交JMS事务
//pseudo code
if (isDublicate(message))
commitJMSTransaction();
else
doYourBusinessLogic();
doYourDBOperation();
commitDBTransaction();
commitJMSTransaction();
如果JMS事务失败,您的message broker将重试发送消息(或者您需要根据代理设置手动重新发送消息),但您的重复检查将检测到该消息并将其从队列中删除。为了让您了解XA和非XA事务,我简要解释一下, XA事务是“全局事务”。 非XA事务是“本地事务” XA事务涉及一个协调事务管理器,其中一个或多个数据库(或其他资源,如JMS)都涉及单个全局事务。如果它连接到多个数据库,那么它就是XA
非XA事务没有事务协调器,单个资源自己完成所有事务工作。这将只有一个数据库作为资源。您在这里做了几个假设,这些假设不一定正确:数据库和排队系统都必须支持XA协议。这些假设是有问题的。他说他可以在XA数据源和非XA数据源之间进行选择,但他担心性能。WebSphere消息传递确实支持XA,这是J2EE规范的要求。我只是展示了一个XA如何帮助的示例。您可能应该解释如何管理队列,使用什么产品。一些数据库供应商还提供排队解决方案,这将使您的生活更轻松。