TsgcWSCircuitBreaker方法 › Execute

Execute 方法

运行受保护的操作;首先检查 IsCallAllowed,并自动记录成功/失败/慢速。

重载

重载 1

语法

function Execute(const aKey: string; aAction: TProc): Boolean;

参数

名称类型描述
aKeyconst string调用所属的熔断器键,通常为主机名('api.openai.com')或逻辑服务名称。每个键拥有自己的状态、计数器和阈值。
aActionTProc在断路器下运行的匿名过程。内部抛出的任何异常都会被分类,并在记录后(如果已记录)增加失败计数器,然后重新抛出给调用者。

返回值

如果操作已执行(熔断器关闭或 HalfOpen 试探允许),则为 True;如果因熔断器开路而被拒绝,则为 False。拒绝时,OnCallRejected 事件触发,若已启用 Fallback,则随后触发 OnFallback。(Boolean

备注

带有显式 aKey 的重载首先评估 IsCallAllowed(aKey)。若允许,则测量操作持续时间,根据结果调用 RecordSuccess 或 RecordFailure(当 aDurationMs >= Thresholds.SlowCallDurationMs 时还调用 RecordSlow),然后向调用者重新抛出任何异常。需要 Delphi 2009+ 因为使用了 TProc。当断路器 Open 且 Fallback.Enabled 为 True 时,触发 OnFallback 事件,调用者可提供缓存的负载;当 Fallback 禁用时,该方法静默返回 False。不要假设 Execute 会抑制异常:它仍然让调用者看到失败——断路器只是跟踪它们。

示例

// Run a protected call against OpenAI under key 'openai-api'
if not sgcWSCircuitBreaker1.Execute('openai-api',
  procedure
  begin
    CallOpenAIEndpoint;
  end) then
  LogRejected('Circuit open for openai-api');

重载 2

语法

function Execute(aAction: TProc): Boolean;

参数

名称类型描述
aActionTProc在断路器下运行的匿名过程。内部引发的任何异常都会被分类,并且(若已记录)在重新抛出之前推进失败计数器。

返回值

若操作执行则返回 True,若因断路器处于 Open 状态而被拒绝则返回 False。(Boolean

备注

使用 DefaultKey 作为断路器密钥的双参数重载的快捷方式。需要 Delphi 2009+。在调用之前将 DefaultKey 设置为有意义的名称('openai-api''payment-gateway'),以便 Metrics、OnStateChange 和 OnCallRejected 报告可读的标签。

示例

sgcWSCircuitBreaker1.DefaultKey := 'openai-api';

// Single-key protected call — no need to pass the key each time
sgcWSCircuitBreaker1.Execute(
  procedure
  begin
    CallOpenAIEndpoint;
  end);

返回方法