TsgcWSCircuitBreaker › 方法 › IsCallAllowed
当给定密钥当前允许新调用时返回 True;推进半开试探计数。
function IsCallAllowed(const aKey: string): Boolean;
| 名称 | 类型 | 描述 |
|---|---|---|
aKey | const 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;