Docs 菜单
Docs 主页
/ / /
PHP 库手册
/ /

MongoDB\with_transaction()

在此页面上

  • 定义
  • 参数
  • 行为
  • 错误/异常
  • 另请参阅

1.5 版本中的新增功能

MongoDB\with_transaction()

使用给定的客户端会话在事务中执行回调

function with_transaction(
MongoDB\Driver\Session $session,
callable $callback,
array $transactionOptions = []
): void
$session : MongoDB\Driver\Session
用于执行事务的客户端会话。
$callback : 可调用
将在事务中运行的回调。 回调必须接受 MongoDB\Driver\Session 对象作为其第一个参数。
$transactionOptions : array
事务选项,将传递给 MongoDB\Driver\Session::startTransaction 。有关支持的选项列表,请参阅扩展文档。

该函数负责启动事务、调用回调和提交事务。 在出现某些错误后,它还会应用逻辑在预设时限内重试此过程。 回调应通过传递回调的 MongoDB\Driver\Session 来执行事务中的一个或多个操作 参数作为这些操作的选项;但是,这并没有强制执行。

注意

强烈建议应用程序使用 幂等 回调,因为如果在回调执行或提交期间遇到可重试错误,则可能会多次调用它。

在执行回调期间抛出的任何异常都将被捕获并评估。 如果异常具有TransientTransactionError错误标签,则事务将中止、重新启动,并再次调用回调。 对于任何其他异常,事务将被中止,并重新引发异常,以将错误传播给with_transaction()的调用者。

成功执行回调后,将提交事务。 如果遇到错误标签为 UnknownTransactionCommitResult 的异常,则会重试提交。 如果遇到错误标签为TransientTransactionError的异常,则事务将重新启动,控制权将返回以调用回调。 任何其他异常都将重新引发,以将错误传播给with_transaction()的调用者。

当回调执行或提交期间发生错误时,仅当自首次调用with_transaction()以来经过的时间少于 120 秒时才会重试该进程。 此时间限制不可配置。 在此时间之后,任何通常会导致重试的异常都将被重新抛出。

MongoDB\Exception\InvalidArgumentException 用于与参数或选项解析相关的错误。

MongoDB\ 驱动程序\Exception\RuntimeException 对于扩展级别的其他错误(例如连接错误)。

后退

remove_logger()