sentinel流量制御
7161 ワード
sentinel流量制御
ルール影響パラメータ
LimitAppの詳細
パラメータの説明
フロー制御規則のlimitAppフィールドは、呼び出し元に基づいてトラフィック制御を行うために使用されます.このフィールドの値には、次の3つのオプションがあります.
同じリソース名で複数のルールを構成できます.ルールの有効な順序は、{some_origin_name}>other>defaultです.
{some_origin_name}パラメータの使用方法
sentinelはContextUtilを通過する.Enter(resourceName,origin)メソッドのoriginパラメータには、呼び出し元のIDが表示されます.この方法はcom.alibaba.csp.sentinel.adapter.servlet.CommonFilterで呼び出されます.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
。。。
String origin = this.parseOrigin(sRequest);
ContextUtil.enter(target, origin);
。。
chain.doFilter(request, response);
}
private String parseOrigin(HttpServletRequest request) {
RequestOriginParser originParser = WebCallbackManager.getRequestOriginParser();
String origin = "";
if (originParser != null) {
origin = originParser.parseOrigin(request);
if (StringUtil.isEmpty(origin)) {
return "";
}
}
return origin;
}
以上、origin解析器を取得する必要があることがわかります.WebCallbackManagerを表示すると、RequestOriginParserがnullに設定されており、インタフェースにも実装クラスがありません.したがって、origin解析ルールを実装し、WebCallbackManagerオブジェクトに設定する必要があります.ここではコンテナロード完了イベントで設定し、リクエストアドレスでoriginを取得します.
@Component
public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
// limitApp origin
WebCallbackManager.setRequestOriginParser((request) -> {
String origin = request.getRemoteAddr();
return origin != null ? origin : "";
});
}
}
以上、パラメータoriginを呼び出し元のIDに設定しました.