Java “a”是什么;“事务性工作单位”;用简单的英语?
这个问题直接来自SO中的a。我仍然无法理解将JMS会话用作事务性工作单元的概念 书中: QueueConnection对象用于创建JMS会话对象 (特别是队列会话),它是工作线程和 JMS中的事务工作单元。与JDBC不同,JDBC需要 对于每个事务性工作单元,JMS使用单个 连接和多个会话对象。通常,应用程序将 在应用程序启动时创建单个JMS连接并维护 需要发送消息时使用的会话对象池 产生或消费的Java “a”是什么;“事务性工作单位”;用简单的英语?,java,transactions,jms,messaging,Java,Transactions,Jms,Messaging,这个问题直接来自SO中的a。我仍然无法理解将JMS会话用作事务性工作单元的概念 书中: QueueConnection对象用于创建JMS会话对象 (特别是队列会话),它是工作线程和 JMS中的事务工作单元。与JDBC不同,JDBC需要 对于每个事务性工作单元,JMS使用单个 连接和多个会话对象。通常,应用程序将 在应用程序启动时创建单个JMS连接并维护 需要发送消息时使用的会话对象池 产生或消费的 我无法理解“事务性工作单元”一词的含义。我在这里要找的是一个简单明了的解释和一个例子。会话可以作为
我无法理解“事务性工作单元”一词的含义。我在这里要找的是一个简单明了的解释和一个例子。会话可以作为事务创建。对于session.commit()上的事务处理会话,将提交此会话的使用者已收到的所有消息,即已收到的消息将从其目标(队列或主题)中删除,并且此会话的所有生产者已发送的消息将对其他客户端可见。回滚时,接收的消息返回到其目的地,已发送的消息从目的地删除。提交/回滚之前发送/接收的所有消息都是一个工作单元。会话可以作为事务创建。对于session.commit()上的事务处理会话,将提交此会话的使用者已收到的所有消息,即已收到的消息将从其目标(队列或主题)中删除,并且此会话的所有生产者已发送的消息将对其他客户端可见。回滚时,接收的消息返回到其目的地,已发送的消息从目的地删除。在提交/回滚之前,所有发送/接收的消息都是一个工作单元。一系列处理/发送所有或无的消息。一系列处理/发送所有或无的消息。一个工作单元必须完成全部或不完成。如果它不能完成,那就好像它从未发生过一样 用JTA的说法,工作单元由
transaction.begin()
调用和transaction.commit()
调用之间的transactional
资源交互组成
假设您定义了一个工作单元,用于提取源队列的消息,在数据库中插入一条记录,并将另一条消息放入目标队列。在这个场景中,事务感知资源是两个JMS队列和数据库
如果在数据库插入之后发生了故障,那么为了实现原子性,必须做很多事情。必须回滚数据库提交,以便数据源中没有孤立记录,并且必须替换从源队列中提取的消息
在这个人为设计的场景中,最终的结果是,无论在工作单元的哪个位置发生故障,结果都是您开始时的确切状态
关于消息传递系统,需要记住的关键是,一个更全局的事务可以由几个更小的原子事务切换组成
Queue A -> Processing Agent -> Queue B --> Processing Agent --> Queue C
在这种情况下,实际上并不存在全局事务上下文(例如,将B->C
中的故障回滚到a
),但您所拥有的是消息将沿着链传递或保留在源队列中的Garaunite。这使得系统在任何时刻都保持一致。异常状态可以通过创建错误路由来处理,以实现更全局的一致性状态。一个工作单元必须完成全部或全部。如果它不能完成,那就好像它从未发生过一样
用JTA的说法,工作单元由transaction.begin()
调用和transaction.commit()
调用之间的transactional
资源交互组成
假设您定义了一个工作单元,用于提取源队列的消息,在数据库中插入一条记录,并将另一条消息放入目标队列。在这个场景中,事务感知资源是两个JMS队列和数据库
如果在数据库插入之后发生了故障,那么为了实现原子性,必须做很多事情。必须回滚数据库提交,以便数据源中没有孤立记录,并且必须替换从源队列中提取的消息
在这个人为设计的场景中,最终的结果是,无论在工作单元的哪个位置发生故障,结果都是您开始时的确切状态
关于消息传递系统,需要记住的关键是,一个更全局的事务可以由几个更小的原子事务切换组成
Queue A -> Processing Agent -> Queue B --> Processing Agent --> Queue C
在这种情况下,实际上并不存在全局事务上下文(例如,将B->C
中的故障回滚到a
),但您所拥有的是消息将沿着链传递或保留在源队列中的Garaunite。这使得系统在任何时刻都保持一致。可以通过创建错误路由来处理异常状态,以实现更全局的一致性状态。“可以通过创建错误路由来处理异常状态,以实现更全局的一致性状态。”这是什么意思?你能详细说明一下吗?当然可以。我的意思是让你的处理代理决定把东西放在哪个队列上。因此,您的处理代理会检测到问题,而不是失败并回滚事务,您可以选择将消息路由到处理错误状态的队列。“可以通过创建的错误路由来处理异常状态,以实现更全局的一致性状态。”您可以