Sentinel FlowSlot扩展关联FlowRuleManager.getFlowRuleMap()问题

uqxowvwt  于 2022-10-19  发布在  其他
关注(0)|答案(4)|浏览(132)

在扩展FlowSlot后,会关联FlowRuleManager.getFlowRuleMap(),但是在FlowRuleManager中getFlowRuleMap是private,请问这种应该如何解决,或者如何正确的扩展FlowSlot?
谢谢!

6ojccjat

6ojccjat1#

目前 getFlowRuleMap 不可直接调用,但是你可以自己维护一个FlowRuleMap,并通过以下方式感知FlowRule的变更,方便维护你的FlowRuleMap。后续正常编写你的限流逻辑即可

DynamicSentinelProperty<List<FlowRule>> dynamicSentinelProperty = new DynamicSentinelProperty<>();
dynamicSentinelProperty.addListener(new PropertyListener<List<FlowRule>>() {
    @Override
    public void configUpdate(List<FlowRule> flowRules) {
        //TODO 做你的FlowRule变更逻辑
    }

    @Override
    public void configLoad(List<FlowRule> flowRules) {
        //TODO 做你的FlowRule加载逻辑
    }
});
FlowRuleManager.register2Property(dynamicSentinelProperty);
6qftjkof

6qftjkof2#

目前 getFlowRuleMap 不可直接调用,但是你可以自己维护一个FlowRuleMap,并通过以下方式感知FlowRule的变更,方便维护你的FlowRuleMap。后续正常编写你的限流逻辑即可

DynamicSentinelProperty<List<FlowRule>> dynamicSentinelProperty = new DynamicSentinelProperty<>();
dynamicSentinelProperty.addListener(new PropertyListener<List<FlowRule>>() {
    @Override
    public void configUpdate(List<FlowRule> flowRules) {
        //TODO 做你的FlowRule变更逻辑
    }

    @Override
    public void configLoad(List<FlowRule> flowRules) {
        //TODO 做你的FlowRule加载逻辑
    }
});
FlowRuleManager.register2Property(dynamicSentinelProperty);

其实不用维护自己的FlowRuleMap。 register2Property 这个方法会执行 property.addListener(LISTENER); ,而 LISTENER 就是 FlowRuleManager 的静态变量,该LISTENER监听配置变化,会更新 FlowRuleManager 的静态变量 flowRules

2uluyalo

2uluyalo3#

目前 getFlowRuleMap 不可直接调用,但是你可以自己维护一个FlowRuleMap,并通过以下方式感知FlowRule的变更,方便维护你的FlowRuleMap。后续正常编写你的限流逻辑即可

DynamicSentinelProperty<List<FlowRule>> dynamicSentinelProperty = new DynamicSentinelProperty<>();
dynamicSentinelProperty.addListener(new PropertyListener<List<FlowRule>>() {
    @Override
    public void configUpdate(List<FlowRule> flowRules) {
        //TODO 做你的FlowRule变更逻辑
    }

    @Override
    public void configLoad(List<FlowRule> flowRules) {
        //TODO 做你的FlowRule加载逻辑
    }
});
FlowRuleManager.register2Property(dynamicSentinelProperty);

其实不用维护自己的FlowRuleMap。 register2Property 这个方法会执行 property.addListener(LISTENER); ,而 LISTENER 就是 FlowRuleManager 的静态变量,该LISTENER监听配置变化,会更新 FlowRuleManager 的静态变量 flowRules

我理解题主的意思是想自己做限流扩展,但因没有暴露public API,无法直接获取FlowRuleMap,所以可以自己监听变更,自行通过 FlowRuleManager.getRules 来维护一个FlowRuleMap。

kxxlusnw

kxxlusnw4#

目前 getFlowRuleMap 不可直接调用,但是你可以自己维护一个FlowRuleMap,并通过以下方式感知FlowRule的变更,方便维护你的FlowRuleMap。后续正常编写你的限流逻辑即可

DynamicSentinelProperty<List<FlowRule>> dynamicSentinelProperty = new DynamicSentinelProperty<>();
dynamicSentinelProperty.addListener(new PropertyListener<List<FlowRule>>() {
    @Override
    public void configUpdate(List<FlowRule> flowRules) {
        //TODO 做你的FlowRule变更逻辑
    }

    @Override
    public void configLoad(List<FlowRule> flowRules) {
        //TODO 做你的FlowRule加载逻辑
    }
});
FlowRuleManager.register2Property(dynamicSentinelProperty);

其实不用维护自己的FlowRuleMap。 register2Property 这个方法会执行 property.addListener(LISTENER); ,而 LISTENER 就是 FlowRuleManager 的静态变量,该LISTENER监听配置变化,会更新 FlowRuleManager 的静态变量 flowRules

我理解题主的意思是想自己做限流扩展,但因没有暴露public API,无法直接获取FlowRuleMap,所以可以自己监听变更,自行通过 FlowRuleManager.getRules 来维护一个FlowRuleMap。

是的

相关问题