首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是通俗易懂的“事务性工作单位”?

什么是通俗易懂的“事务性工作单位”?
EN

Stack Overflow用户
提问于 2013-06-27 12:56:13
回答 3查看 1.8K关注 0票数 1

这个问题直接来源于SO中的我以前的问题。我仍然无法理解JMS会话被用作事务工作单元的概念。

来自Java消息服务的书:

QueueConnection对象用于创建JMS对象(特别是队列会话),它是JMS中的工作线程和事务工作单元。与JDBC不同,JDBC为每个事务工作单元都需要一个连接,JMS使用单个连接和多个会话对象。通常,应用程序将在应用程序启动时创建单个JMS连接,并维护一个会话对象池,以便在需要生成或使用消息时使用。

我无法理解事务性工作单位这一短语的含义。我在这里寻找的是一个简单而简单的例子。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-27 15:28:22

一个单位的工作是必须完成所有或什么都不做的事情。如果它不能完成,它肯定是从来没有发生过的。

在JTA术语中,工作单元由transaction.begin()调用和transaction.commit()调用之间与transaction.begin()资源的交互组成。

假设您定义了一个工作单元,它可以提取源队列的消息,在数据库中插入记录,并将另一条消息放置在目标队列中。在这个场景中,transaction aware资源是两个JMS和数据库。

如果在数据库插入后发生故障,那么必须发生一些事情才能实现原子性。必须回滚数据库提交,以便在数据源中没有孤立的记录,并且必须替换从源队列中提取的消息。

这个精心设计的场景中的净输出是,无论unit of work中的故障发生在哪里,结果都是您开始时所处的确切状态。

关于消息传递系统,要记住的关键是,一个更全局的事务可以由几个较小的原子事务切换队列组成。

代码语言:javascript
运行
复制
Queue A -> Processing Agent -> Queue B --> Processing Agent --> Queue C

虽然在这个场景中并没有真正的全局事务上下文(例如,在B->C中一直滚动到A的失败),但您所拥有的是消息将沿着链传递或保留在它们的源队列中。这使得系统在任何时候都是一致的。可以通过创建错误路由来处理异常状态,以实现更全局的一致性状态。

票数 4
EN

Stack Overflow用户

发布于 2013-06-27 14:36:27

处理/发送(所有none )的一系列消息。

票数 4
EN

Stack Overflow用户

发布于 2013-06-27 13:37:02

会话可以作为事务创建。对于session.commit()上的事务会话,此会话的使用者收到的所有消息都已提交,接收到的消息将从其目的地(队列或主题)中移除,并且该会话的所有生产者发送的消息对其他客户端都是可见的。在回滚时,接收到的邮件返回其目的地,从目的地删除发送的邮件。在提交/回滚之前,所有发送/接收的消息都是一个工作单元。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17343795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档