跳到主要内容

完成事务

在事务中发布的消息和接收的消息会被暂存到 SolacePubSub+ 事件代理上。事务可以通过以下两种方式完成:

  • 通过提交操作完成:提交事务
  • 通过回滚操作取消:回滚事务

提交事务

当成功调用事务的提交操作时,会发生以下操作:

  • 对于发布操作,暂存的消息会被发送到它们的目标地址;
  • 对于接收操作,消费者会确认接收到的消息,然后从暂存消息的端点中移除这些消息。

提交操作是阻塞操作。完成这些操作后,事务结束,下一个事务会自动开始。

如果提交因任何原因失败(例如,由于之前的发送和/或接收操作失败),整个事务将回滚。会生成回滚异常或错误以及特定的子代码,可以通过子代码确定失败原因。

PubSub+ 消息 API调用方法
Java RTOTransactedSessionHandle.commit()
CsolClient_transactedSession_commit()
.NETTransactedSession.commit()

如何提交事务


回滚事务

客户端可以通过回滚操作取消一个活动事务,而不是通过提交完成事务。当执行回滚时,会发生以下操作:

  • 活动事务的暂存信息被移除,因此:
    • 对于发布操作,发布的消息会被删除;
    • 对于消费操作,消息仍然保留在它们被暂存的端点上;
  • 自动生成一个新的事务。

回滚操作是阻塞操作。

如果事务性会话因网络故障或事件代理重置而失败,客户端可以立即重新连接(如果客户端连接的重试次数大于零,则此过程是自动的),并且如果可能,API 会重新建立正在进行的事务。如果会话和事务在三分钟内未重新建立,事件代理会自动回滚正在进行的事务。(有关设置客户端重连属性的更多信息,请参阅“配置连接超时和重试”。)

PubSub+ 消息 API调用方法
Java RTOTransactedSessionHandle.rollback()
CsolClient_transactedSession_rollback(...)
.NETTransactedSession.rollback(...)

如何回滚事务