Sentinel教程进阶三SentinelProperty

SentinelProperty#

sentinelProperty在sentinel中非常常用,如果要阅读代码,sentinelProperty必须先理解,我们先看看它是什么?

img

既然叫SentinelProperty,那么它的主要角色肯定就是一个property,主要方法是updateValue

同时它还提供了两个方法addListener和removeListener, 添加监听器(PropertyListener)和删除监听器,监听什么呢?监听updateValue,当updateValue触发时,触发对应的listener。

DynamicSentinelProperty#

它是SentinelProperty的一个实现类

public class DynamicSentinelProperty<T> implements SentinelProperty<T> {
    //listener集合,是一个hashset
    protected Set<PropertyListener<T>> listeners = Collections.synchronizedSet(new HashSet());
    //property的值
    private T value = null;

    public DynamicSentinelProperty() {
    }

    public DynamicSentinelProperty(T value) {
        this.value = value;
    }

    public void addListener(PropertyListener<T> listener) {
        //添加一个listener,并触发lister的configLoad方法
        this.listeners.add(listener);
        listener.configLoad(this.value);
    }

    public void removeListener(PropertyListener<T> listener) {
        //删掉listener
        this.listeners.remove(listener);
    }

    
    public boolean updateValue(T newValue) {
        if (this.isEqual(this.value, newValue)) {
            return false;
        } else {
            RecordLog.info("[DynamicSentinelProperty] Config will be updated to: {}", new Object[]{newValue});
            this.value = newValue;
            Iterator var2 = this.listeners.iterator();
			//当value更新时,触发所有listener的configUpdate
            while(var2.hasNext()) {
                PropertyListener<T> listener = (PropertyListener)var2.next();
                listener.configUpdate(newValue);
            }

            return true;
        }
    }

    ...
}

PropertyListener#

public interface PropertyListener<T> {
    //监听property的改变
    void configUpdate(T var1);
	//addListener时触发
    void configLoad(T var1);
}

#

作者:roylee666

出处:https://www.cnblogs.com/roylee666/p/15847376.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   树先生1024  阅读(342)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示