TsgcWSCircuitBreaker › 方法 › IsMessageAllowed
服务器端守门人,当 ServerKey 断路器处于 Open 状态时返回 False 并拒绝消息。
function IsMessageAllowed(const aIP: string; const aMessage: string = ''): Boolean;
| 名称 | 类型 | 描述 |
|---|---|---|
aIP | const string | 发送方的对端 IP 地址。用于日志记录及未来的逐 IP 指标统计。 |
aMessage | const string | 可选的消息载荷或标识符,接受该参数以便未来版本可进行基于内容的分类;当前评估忽略此参数。 |
当 ServerKey 断路器处于 Closed 或 HalfOpen(仍有剩余试验次数)状态时返回 True,处于 Open 状态时返回 False。当 Enabled 为 False 时无条件返回 True。(Boolean)
服务器端自我保护辅助方法:委托给 IsCallAllowed(ServerKey)。在服务器的 OnMessage / BeforeMessage 处理程序中调用此方法,并在返回 False 时丢弃消息,以便在服务器断路器打开时卸载传入流量。结合 RecordMessageSuccess / RecordMessageError 使用,使消息处理结果反馈到断路器。这是一个次要的服务器集成钩子——该组件的主要用途是客户端侧保护出站 HTTP API 调用。
procedure TForm1.WSServerMessage(Connection: TsgcWSConnection;
const Text: string);
begin
if not sgcWSCircuitBreaker1.IsMessageAllowed(Connection.PeerIP, Text) then
Exit; // shed load while the server circuit is Open
try
HandleMessage(Text);
sgcWSCircuitBreaker1.RecordMessageSuccess(Connection.PeerIP);
except
on E: Exception do
sgcWSCircuitBreaker1.RecordMessageError(Connection.PeerIP, E.Message);
end;
end;