重试环连接器 (Ring-Coordinator Connector)

概述 (Overview)

重试环连接器 (Ring-Coordinator Connector) 是一个辅助模块,用于在重试环架构中将标准的编排器 (Orchestrator) 服务转变为*重试节点 (Retry Node)*。 它连接到已配置的主重试协调器 (Master Ring-Coordinator),查找可用的从重试协调器 (Slave Ring-Coordinator),并与该 Slave 建立连接并保持长连接活跃,以接收执行重试任务所需的环分区信息 (Ring-Partition Information)。 如需深入了解,请阅读 重试节点 (Retry-Node) 章节。

要将标准 Orchestrator 服务转变为重试节点,请在 Orchestrator 服务中添加 stacksaga-ring-coordinator-connector 依赖,并配置 Master Ring-Coordinator 的连接详情。 随后,Orchestrator 服务将自动连接到 Master Ring-Coordinator,并开始接收环分区信息以执行重试任务。

依赖管理 (Dependency Management)

<dependencyManagement>
    <dependencies>
        <dependency> <!--仅用于 stacksaga 依赖项版本管理-->
            <groupId>org.stacksaga</groupId>
            <artifactId>stacksaga-bom</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.stacksaga</groupId>
        <artifactId>stacksaga-ring-coordinator-connector</artifactId>
    </dependency>
</dependencies>
推荐使用 StackSaga Initializer (初始化器) 获取项目所需的 StackSaga 依赖配置代码段,以确保您的项目拥有正确的版本和依赖组合。

添加依赖项后,请在应用程序配置文件(application.yml 或 application.properties)中配置 Master Ring-Coordinator 的连接详情。

配置属性 (Configuration Properties)

请在应用程序配置文件(application.yml 或 application.properties)中配置以下属性,以便 Connector 能够连通 Master Ring-Coordinator 并接收环分区信息。

默认值 (Default) 列中显示连字符 (-) 的属性为必填项且无默认值,必须显式指定。
属性名称 (Property Name) 默认值 (Default) 类型 (Type) 描述 (Description)

通用配置 (General)

stacksaga.coordinator.connector.enabled

false

boolean

是否启用 Ring-Coordinator Connector 模块。设置为 true 可将标准 Orchestrator 服务转变为*重试节点 (Retry Node)*。默认处于禁用状态,以便同一 Orchestrator 服务在不需要重试环架构时无需修改即可运行——避免了为同一业务构建和部署两套 Orchestrator 服务(一套带 connector,一套不带)的繁琐操作。

Master 连接配置 — 首次查找可用 Slave

stacksaga.coordinator.connector.master.requester.host

-

String

Connector 连接的主重试协调器 (Master Ring-Coordinator) 主机地址,用于查找可用的从重试协调器 (Slave Ring-Coordinator)。

stacksaga.coordinator.connector.master.requester.port

-

int

Connector 连接的 Master Ring-Coordinator 端口号。

stacksaga.coordinator.connector.master.requester.connect-timeout

5s

Duration

客户端在宣告失败前尝试与 Master 建立 TCP 连接的超时等待时间。

stacksaga.coordinator.connector.master.requester.max-retries

10

int

连接断开后,在与 Master 的*当前*连接上进行重新连接尝试的最大次数。一旦达到此限制,Connector 将丢弃该连接,并根据配置的主机和端口重新建立全新连接——它不会停止运行。新建连接会重新解析主机名,因此即使集群中只有一个 Master,如果 Master 重启或被重新调度到新 IP,Connector 也能获取最新 IP 地址(绕过 JVM DNS 缓存问题),而不会无休止地重试陈旧失效的地址。

stacksaga.coordinator.connector.master.requester.backoff-duration

2s

Duration

连接断开后首次重试前的初始退避时间 (Initial Backoff)。较短的延迟有助于瞬态问题自动恢复,而不会造成过长的停机时间。

stacksaga.coordinator.connector.master.requester.max-backoff-duration

5s

Duration

重连退避时间的上限值。两次尝试之间递增的退避时间绝不会超过该值。

Master 连接配置 — 注册表中暂无可用 Slave 时的重试策略

stacksaga.coordinator.connector.master.requester.retry-on-no-slave.max-attempts

Integer.MAX_VALUE

int

当与 Master 成功建立连接但 Master 缓存中当前没有可用 Slave 提供服务时的最大重试次数。此时与 Master 的连接保持正常,无需重新建连,Connector 仅在每次尝试时向 Master 重新请求 Slave 详情,直到有可用 Slave 为止,随后再连接到该 Slave(受下方的 slave.requester.* 属性管控)。默认值为 Integer.MAX_VALUE(无限重试)以提供最大的弹性韧性;如果您希望在长时间故障期间限制重试次数,可以调低该值。

stacksaga.coordinator.connector.master.requester.retry-on-no-slave.backoff-duration

2s

Duration

暂无可用 Slave 时首次重试前的初始退避时间。

stacksaga.coordinator.connector.master.requester.retry-on-no-slave.max-backoff-duration

5s

Duration

无可用 Slave 重试退避时间的上限值。

Slave 连接配置 — 查找到可用 Slave 后的连接参数

stacksaga.coordinator.connector.slave.requester.connect-timeout

5s

Duration

客户端在宣告失败前尝试与查找到的 Slave 建立 TCP 连接的超时等待时间。

stacksaga.coordinator.connector.slave.requester.max-retries

10

int

连接断开后,在与*当前* Slave 的连接上进行重新连接尝试的最大次数。一旦达到此限制,Connector 将停止重试该 Slave,并返回 Master 查找*另一个* Slave——因为 Master 本身是健康的,仅当前 Slave 连接失效。如果该 Slave 已宕机或处于不健康状态,它极大概率已经被从 Master 的注册表中剔除(Master 会随着 Slave 连接的变化实时维护该注册表),因此重新查找将返回一个全新的健康 Slave。

stacksaga.coordinator.connector.slave.requester.backoff-duration

2s

Duration

与 Slave 断开后首次重连尝试前的初始退避时间。

stacksaga.coordinator.connector.slave.requester.max-backoff-duration

5s

Duration

与 Slave 重连退避时间的上限值。