TsgcWSCircuitBreaker › 属性 › Classification
决定哪些异常被记录为失败、哪些被忽略的规则。
property Classification: TsgcCircuitBreakerClassification
read FClassification write SetClassification;
—
只有已记录的异常才会推进失败计数器,业务级错误(如 HTTP 4xx)不应触发断路,而传输级错误和 HTTP 5xx 应该触发。每个抛出的异常被转换为 ClassName: Message 字符串,首先与 IgnoreExceptions 中的模式比较(匹配则静默丢弃),然后与 RecordAsFailure 中的模式比较(匹配则记录)。当 RecordAsFailure 为空时,所有未被忽略的异常都被记录。MatchMode(TsgcCircuitBreakerExceptionMatch)选择模式比较方式:cemExact、cemContains(默认)、cemStartsWith 或 cemWildcard(支持 * 和 ?)。典型用法:记录 HTTP 5xx 和 timeout,忽略 HTTP 400/401/404,以避免验证和授权失败打开断路器。
// Record HTTP 5xx and timeouts as failures; ignore client-side 4xx
sgcWSCircuitBreaker1.Classification.MatchMode := cemContains;
sgcWSCircuitBreaker1.Classification.RecordAsFailure.Add('HTTP/1.1 500');
sgcWSCircuitBreaker1.Classification.RecordAsFailure.Add('HTTP/1.1 502');
sgcWSCircuitBreaker1.Classification.RecordAsFailure.Add('HTTP/1.1 503');
sgcWSCircuitBreaker1.Classification.RecordAsFailure.Add('HTTP/1.1 504');
sgcWSCircuitBreaker1.Classification.RecordAsFailure.Add('timeout');
sgcWSCircuitBreaker1.Classification.IgnoreExceptions.Add('HTTP/1.1 400');
sgcWSCircuitBreaker1.Classification.IgnoreExceptions.Add('HTTP/1.1 401');
sgcWSCircuitBreaker1.Classification.IgnoreExceptions.Add('HTTP/1.1 404');