配置属性 (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) |
|---|---|---|---|
|
|
|
全局启用或禁用该 starter。默认为 |
以下 |
|||
|
|
|
事件存储使用的 R2DBC 连接 URL,例如 |
|
|
|
响应式事件存储连接的目标数据库服务器主机地址。 |
|
|
|
响应式事件存储连接的目标数据库端口。非 MySQL 方言时需覆盖(例如 Oracle 监听端口为 |
|
|
|
事件存储通过 R2DBC 访问的目标数据库名称或服务名。 |
|
|
|
事件存储 R2DBC 连接的用户名。 |
|
|
|
事件存储 R2DBC 连接的密码。 |
|
|
|
与数据库服务器建立事件存储连接的最大等待超时时间。 |
|
|
|
事件存储专用的 R2DBC 驱动附加连接选项(键值对形式)。 |
|
|
|
事件存储连接池启动时初始创建的连接数。 |
|
|
|
事件存储连接池允许的最大连接数。 |
|
|
|
连接在池中保持空闲的最长时间,超时将被自动关闭回收。 |
|
|
|
连接在池中允许存活的最长时间,超出此寿命的连接将被关闭并用新连接替代。 |
|
|
|
从连接池中获取可用连接的最大超时等待时间。 |
|
|
|
从池中借出连接前用于探活校验的 SQL 查询语句。 |
以下 |
|||
|
|
|
事务等待下次被暴露用于重试的默认延迟时间,避免短时间内过于频繁的无意义重试。 |
|
|
|
事务在无状态更新的情况下被认定为已崩溃(例如 Pod 异常中断崩溃)并被恢复用于重试的默认延迟时间。 |
|
|
|
事务在事件存储中允许存活的最大时间。超过此期限后事务将被隔离归档,即便仍处于未完成状态也绝不会再被暴露进行恢复。 |
|
|
|
针对特定领域实体的重试延迟覆盖配置(例如 |
|
|
|
针对特定领域实体的崩溃恢复延迟覆盖配置(例如 |
|
|
|
针对特定领域实体的事务生命周期覆盖配置(例如 |
以下 |
|||
|
|
|
控制单次从数据库批量拉取到内存缓冲区的事务数量 (Reactor |
|
|
|
控制框架何时触发下一次数据库批量拉取以补充缓冲区 (Reactor |
|
|
|
控制在恢复流水线中并发处理的事务数量 (Reactor |
|
|
|
控制在处理开始前预先拉取并缓存在内存中的事务数量 (Reactor |
事务恢复配置示例 (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.ymlstacksaga:
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