配置属性 (Configuration Properties)

下方的数据库连接、连接池、事务恢复以及恢复节点数据流配置属性,由通用的方言无关配置类进行统一绑定。这些配置在所有 stacksaga-*-reactive-support SQL 模块之间完全共享——包括 MySQL、Oracle、PostgreSQL,以及未来加入的任何其他 SQL 方言:

  • stacksaga.datasource.* 用于为事件存储配置专用的响应式 R2DBC 连接工厂与连接池。

  • stacksaga.sql.transaction.recovery.* 用于按 Saga 领域实体(具备全局默认值)配置事务重试延迟、崩溃恢复延迟以及事务生命周期。

  • stacksaga.transaction.recovery-node.* 用于在编排器实例作为 重试节点 (Retry-Node) 运行时,调优响应式流式处理流水线。该流水线仅在通过 stacksaga.coordinator.connector.enabled=true(默认值为 false)启用时才会激活。

属性名称 (Property Name) 默认值 (Default Value) 类型 (Type) 描述说明 (Description)

stacksaga.datasource.enabled

true

boolean

全局启用或禁用该 starter。默认为 true,引入依赖后自动激活。

以下 stacksaga.datasource.r2dbc. 属性用于配置响应式事件存储所使用的 R2DBC 数据库连接(针对事件存储的读写操作)。*

stacksaga.datasource.r2dbc.url

-

String

事件存储使用的 R2DBC 连接 URL,例如 r2dbc:mysql://host:3306/database 或 r2dbc:oracle://host:1521/service_name。如果配置了此项,其优先级高于独立的 host/port/database 配置。

stacksaga.datasource.r2dbc.host

localhost

String

响应式事件存储连接的目标数据库服务器主机地址。

stacksaga.datasource.r2dbc.port

3306

int

响应式事件存储连接的目标数据库端口。非 MySQL 方言时需覆盖(例如 Oracle 监听端口为 1521),或直接提供 stacksaga.datasource.r2dbc.url。

stacksaga.datasource.r2dbc.database

-

String

事件存储通过 R2DBC 访问的目标数据库名称或服务名。

stacksaga.datasource.r2dbc.username

-

String

事件存储 R2DBC 连接的用户名。

stacksaga.datasource.r2dbc.password

-

String

事件存储 R2DBC 连接的密码。

stacksaga.datasource.r2dbc.connect-timeout

10s

Duration

与数据库服务器建立事件存储连接的最大等待超时时间。

stacksaga.datasource.r2dbc.options

-

Map<String,String>

事件存储专用的 R2DBC 驱动附加连接选项(键值对形式)。

stacksaga.datasource.r2dbc.pool.initial-size

5

int

事件存储连接池启动时初始创建的连接数。

stacksaga.datasource.r2dbc.pool.max-size

20

int

事件存储连接池允许的最大连接数。

stacksaga.datasource.r2dbc.pool.max-idle-time

30m

Duration

连接在池中保持空闲的最长时间,超时将被自动关闭回收。

stacksaga.datasource.r2dbc.pool.max-life-time

1h

Duration

连接在池中允许存活的最长时间,超出此寿命的连接将被关闭并用新连接替代。

stacksaga.datasource.r2dbc.pool.max-acquire-time

10s

Duration

从连接池中获取可用连接的最大超时等待时间。

stacksaga.datasource.r2dbc.pool.validation-query

SELECT 1

String

从池中借出连接前用于探活校验的 SQL 查询语句。

以下 stacksaga.sql.transaction.recovery. 属性用于管控事件存储的事务重试、崩溃恢复与生命周期,支持全局默认设置及基于 Saga 领域实体的局部覆盖。*

stacksaga.sql.transaction.recovery.default.retry.delay

1m

Duration

事务等待下次被暴露用于重试的默认延迟时间,避免短时间内过于频繁的无意义重试。

stacksaga.sql.transaction.recovery.default.restore.delay

5h

Duration

事务在无状态更新的情况下被认定为已崩溃(例如 Pod 异常中断崩溃)并被恢复用于重试的默认延迟时间。

stacksaga.sql.transaction.recovery.default.lifetime

24h

Duration

事务在事件存储中允许存活的最大时间。超过此期限后事务将被隔离归档,即便仍处于未完成状态也绝不会再被暴露进行恢复。

stacksaga.sql.transaction.recovery.<domain-name>.retry.delay

-

Duration

针对特定领域实体的重试延迟覆盖配置(例如 order-domain)。未配置时自动回退使用 default.retry.delay。

stacksaga.sql.transaction.recovery.<domain-name>.restore.delay

-

Duration

针对特定领域实体的崩溃恢复延迟覆盖配置(例如 order-domain)。未配置时自动回退使用 default.restore.delay。

stacksaga.sql.transaction.recovery.<domain-name>.lifetime

-

Duration

针对特定领域实体的事务生命周期覆盖配置(例如 order-domain)。未配置时自动回退使用 default.lifetime。

以下 stacksaga.transaction.recovery-node. 属性用于调优响应式批量拉取与流式处理流水线。仅当编排器实例通过 stacksaga.coordinator.connector.enabled=true 声明为 重试节点 (Retry-Node) 时生效。*

stacksaga.transaction.recovery-node.batch-size

100

int

控制单次从数据库批量拉取到内存缓冲区的事务数量 (Reactor limitRate 高水位)。较高值可减少数据库网络往返,但会占用更多内存。

stacksaga.transaction.recovery-node.refill-threshold

75

int

控制框架何时触发下一次数据库批量拉取以补充缓冲区 (Reactor limitRate 低水位)。当缓冲数量降至此阈值时触发后台拉取,确保流水线永远不会饥饿停滞。必须小于 batch-size(推荐约为 75%)。

stacksaga.transaction.recovery-node.concurrency

8

int

控制在恢复流水线中并发处理的事务数量 (Reactor flatMap 并发度)。建议保持在连接池大小的 50–70% 之间,以避免连接池耗尽。

stacksaga.transaction.recovery-node.pre-fetch

4

int

控制在处理开始前预先拉取并缓存在内存中的事务数量 (Reactor flatMap 预取度),提高吞吐量并降低批次间的调度延迟。

事务恢复配置示例 (Recovery Configuration Examples)

StackSaga 在 stacksaga.sql.transaction.recovery.default.* 下提供了开箱即用的默认值,并支持基于领域实体名称(如 order-domain)的局部覆盖;当特定领域未显式配置某项属性时,会自动回退使用默认值:

示例 application.properties
# 内置全局默认配置(适用于所有 Saga 领域)
stacksaga.sql.transaction.recovery.default.retry.delay=1m
stacksaga.sql.transaction.recovery.default.restore.delay=5h
stacksaga.sql.transaction.recovery.default.lifetime=24h

# 针对特定领域的局部覆盖(以 "order-domain" 为例)
stacksaga.sql.transaction.recovery.order-domain.retry.delay=10s
stacksaga.sql.transaction.recovery.order-domain.restore.delay=1h
stacksaga.sql.transaction.recovery.order-domain.lifetime=12h
示例 application.yml
stacksaga:
  sql:
    transaction:
      recovery:
        default:
          retry:
            delay: 1m
          restore:
            delay: 5h
          lifetime: 24h
        order-domain:
          retry:
            delay: 10s
          restore:
            delay: 1h
          lifetime: 12h

重试节点流水线配置示例 (Recovery-Node Pipeline Configuration Examples)

默认情况下,所有编排器实例均作为标准节点 (Standard-Nodes) 运行(stacksaga.coordinator.connector.enabled=false),不承担恢复任务。要将特定实例转变为专属的 重试节点 (Retry-Node),请引入 stacksaga-ring-coordinator-connector 依赖并将 stacksaga.coordinator.connector.enabled=true。随后即可通过 stacksaga.transaction.recovery-node.* 调优响应式批处理与并发流水线:

示例 application.properties (重试节点实例)
# 在重试环架构中将此实例激活为重试节点 (Retry-Node)
stacksaga.coordinator.connector.enabled=true

# 重试节点流式处理与并发性能调优
stacksaga.transaction.recovery-node.batch-size=100
stacksaga.transaction.recovery-node.refill-threshold=75
stacksaga.transaction.recovery-node.concurrency=8
stacksaga.transaction.recovery-node.pre-fetch=4
示例 application.yml (重试节点实例)
stacksaga:
  coordinator:
    connector:
      enabled: true # 开启重试节点模式
  transaction:
    recovery-node:
      batch-size: 100
      refill-threshold: 75
      concurrency: 8
      pre-fetch: 4