TsgcWSCircuitBreaker方法 › IsCallAllowed

IsCallAllowed 方法

当给定密钥当前允许新调用时返回 True;推进半开试探计数。

语法

function IsCallAllowed(const aKey: string): Boolean;

参数

名称类型描述
aKeyconst string要检查的断路器键,通常是上游服务的主机名。每个键拥有其自身的状态和计数器。

返回值

当断路器处于 Closed 状态,或 HalfOpen 状态且仍有剩余试验调用配额时返回 True;当处于 Open 状态或 HalfOpen 试验配额已耗尽时返回 False。当 Enabled 为 False 时,无条件返回 True。(Boolean

备注

由 Execute / ExecuteWithResult 以及 HTTP API 客户端集成在每次出站请求之前查阅的核心守门员。如果电路处于 Open 状态且 CooldownSec 已过期,IsCallAllowed 还会执行 Open -> HalfOpen 的转换并递减试验调用预算。当它返回 False 时,内部 TotalRejected 计数器递增,OnCallRejected 触发,附带简短原因字符串(例如 'Circuit Open')。当您希望在不实际运行受保护操作的情况下检查状态时,可从自定义代码中调用此方法,例如决定是否跳过某步骤并直接执行回退。

示例

if not sgcWSCircuitBreaker1.IsCallAllowed('api.openai.com') then
begin
  ServeCachedReply;
  Exit;
end;

try
  Response := sgcAI_OpenAI1.Get('https://api.openai.com/v1/models');
  sgcWSCircuitBreaker1.RecordSuccess('api.openai.com');
except
  on E: Exception do
  begin
    sgcWSCircuitBreaker1.RecordFailure('api.openai.com', E.Message);
    raise;
  end;
end;

返回方法