TsgcWSCircuitBreaker › 事件 › OnStateChange
当回路在 Closed、Open 和 HalfOpen 之间转换时触发。
property OnStateChange: TsgcCircuitBreakerOnStateChange;
// TsgcCircuitBreakerOnStateChange = procedure(Sender: TObject; const aKey: string; aOldState, aNewState: TsgcCircuitState) of object
—
在每次成功的状态转换后触发,包括操作员驱动的 ForceOpen / ForceClose / Reset 以及阈值驱动的 Closed -> Open / Open -> HalfOpen / HalfOpen -> Closed 或 HalfOpen -> Open。aKey 参数标识熔断器(通常为主机名),aOldState / aNewState 为 TsgcCircuitState 值——csClosed、csOpen 或 csHalfOpen。使用此事件进行结构化日志记录、告警(PagerDuty、Slack、Teams)以及绘制每台主机熔断器状态的实时仪表板。在触发转换的线程上同步运行;请保持处理程序快速且非阻塞,将繁重工作委派给工作线程。
procedure TForm1.CircuitStateChange(Sender: TObject; const aKey: string;
aOldState, aNewState: TsgcCircuitState);
const
cStateName: array [TsgcCircuitState] of string =
('Closed', 'Open', 'HalfOpen');
begin
Log(Format('Circuit %s: %s -> %s',
[aKey, cStateName[aOldState], cStateName[aNewState]]));
if aNewState = csOpen then
NotifyPagerDuty('Circuit open for ' + aKey);
end;