跳到主要内容

完成或取消事务

在Solace PubSub+事件代理上,发布的消息和接收的消息都会暂存于事务中。事务可以通过以下两种方式处理:

  • 通过提交操作完成(参见提交事务)
  • 通过回滚操作取消(参见回滚事务)

提交事务

当对一个事务成功调用commit()时,会发生以下情况:

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

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

如果提交因任何原因失败,整个事务会回滚,并抛出一个TransactionRolledBackException来指示失败原因。

回滚事务

客户端应用程序可以通过调用rollback()来回滚一个活动的事务,而不是通过提交来完成。当执行回滚时,会发生以下情况:

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

回滚操作是阻塞操作。

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

关闭事务会话

为了干净地终止一个事务会话,客户端应用程序应该提交当前事务,然后调用close()来关闭事务会话。

如果客户端应用程序在没有先提交当前事务的情况下关闭事务会话,API会回滚该事务,并且不会自动重新尝试该事务。