TsgcWSCircuitBreaker方法 › IsMessageAllowed

IsMessageAllowed 方法

服务器端守门人,当 ServerKey 断路器处于 Open 状态时返回 False 并拒绝消息。

语法

function IsMessageAllowed(const aIP: string; const aMessage: string = ''): Boolean;

参数

名称类型描述
aIPconst string发送方的对端 IP 地址。用于日志记录及未来的逐 IP 指标统计。
aMessageconst 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;

返回方法