跳到主要内容

在PubSub+ JCSMP API中完成事务

在事务中发布和接收的消息会在 Solace PubSub+ 事件代理上暂存。事务可以:

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

提交事务

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

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

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

如果由于任何原因(例如,之前的发送和/或接收操作失败)提交失败,则整个事务将回滚。将生成回滚异常或错误以及特定子代码。可以从子代码中确定失败原因。要提交事务,请使用 TransactedSession.commit()

回滚事务

客户端可以通过回滚操作而非提交操作来取消活动事务。执行回滚时,会发生以下情况:

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

回滚是阻塞操作。要回滚事务,请使用 TransactedSession.rollback()

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