千家信息网

nacos client中ConfigFilterChainManager的原理和应用

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"nacos client中ConfigFilterChainManager的原理和应用",在日常操作中,相信很多人在nacos client中ConfigFilterChainMan
千家信息网最后更新 2026年11月04日nacos client中ConfigFilterChainManager的原理和应用

这篇文章主要介绍"nacos client中ConfigFilterChainManager的原理和应用",在日常操作中,相信很多人在nacos client中ConfigFilterChainManager的原理和应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"nacos client中ConfigFilterChainManager的原理和应用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

序

本文主要研究一下nacos client的ConfigFilterChainManager

IConfigFilterChain

nacos-1.1.3/api/src/main/java/com/alibaba/nacos/api/config/filter/IConfigFilterChain.java

public interface IConfigFilterChain {    /**     * Filter aciton     *     * @param request  request     * @param response response     * @throws NacosException NacosException     */    void doFilter(IConfigRequest request, IConfigResponse response) throws NacosException;}
  • IConfigFilterChain接口定义了doFilter方法

ConfigFilterChainManager

nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/filter/impl/ConfigFilterChainManager.java

public class ConfigFilterChainManager implements IConfigFilterChain {    private List filters = Lists.newArrayList();    public synchronized ConfigFilterChainManager addFilter(IConfigFilter filter) {        // 根据order大小顺序插入        int i = 0;        while (i < this.filters.size()) {            IConfigFilter currentValue = this.filters.get(i);            if (currentValue.getFilterName().equals(filter.getFilterName())) {                break;            }            if (filter.getOrder() >= currentValue.getOrder() && i < this.filters.size()) {                i++;            } else {                this.filters.add(i, filter);                break;            }        }        if (i == this.filters.size()) {            this.filters.add(i, filter);        }        return this;    }    @Override    public void doFilter(IConfigRequest request, IConfigResponse response) throws NacosException {        new VirtualFilterChain(this.filters).doFilter(request, response);    }    //......}
  • ConfigFilterChainManager实现了IConfigFilterChain接口,其doFilter方法使用filters创建VirtualFilterChain,然后执行其doFilter方法;它提供了addFilter方法,可以根据filter的order顺序添加到filters中

VirtualFilterChain

nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/filter/impl/ConfigFilterChainManager.java

public class ConfigFilterChainManager implements IConfigFilterChain {        //......    private static class VirtualFilterChain implements IConfigFilterChain {        private final List additionalFilters;        private int currentPosition = 0;        public VirtualFilterChain(List additionalFilters) {            this.additionalFilters = additionalFilters;        }        @Override        public void doFilter(final IConfigRequest request, final IConfigResponse response) throws NacosException {            if (this.currentPosition != this.additionalFilters.size()) {                this.currentPosition++;                IConfigFilter nextFilter = this.additionalFilters.get(this.currentPosition - 1);                nextFilter.doFilter(request, response, this);            }        }    }    //......}
  • VirtualFilterChain实现了IConfigFilterChain接口,它维护了一个currentPosition属性,其doFilter方法会在currentPosition不等于additionalFilters.size()时递增currentPosition,然后取出nextFilter把自己作为参数去执行doFilter

IConfigFilter

nacos-1.1.3/api/src/main/java/com/alibaba/nacos/api/config/filter/IConfigFilter.java

public interface IConfigFilter {    /**     * Init     *     * @param filterConfig Filter Config     */    void init(IFilterConfig filterConfig);    /**     * do filter     *     * @param request     request     * @param response    response     * @param filterChain filter Chain     * @throws NacosException exception     */    void doFilter(IConfigRequest request, IConfigResponse response, IConfigFilterChain filterChain)            throws NacosException;    /**     * deploy     */    void deploy();    /**     * Get order     *     * @return order number     */    int getOrder();    /**     * Get filterName     *     * @return filter name     */    String getFilterName();}
  • IConfigFilter接口的doFilter方法的第三个参数为IConfigFilterChain;其实现类执行完自己的处理之后,如果要继续,可以执行filterChain.doFilter来继续交给下面的filter处理

小结

ConfigFilterChainManager实现了IConfigFilterChain接口,其doFilter方法使用filters创建VirtualFilterChain,然后执行其doFilter方法;它提供了addFilter方法,可以根据filter的order顺序添加到filters中

到此,关于"nacos client中ConfigFilterChainManager的原理和应用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

方法 接口 原理 应用 学习 顺序 参数 更多 处理 帮助 实用 接下来 三个 大小 小结 属性 文章 理论 知识 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网通讯科技 美国互联网科技巨头监管 紫鲸互联网科技 唐信互联网科技 迪茉互联网科技 互联网科技缩写 互联网科技公司做什么 博兴的互联网电子科技公司 中盈科技互联网信息有限公司 湖南诚度互联网科技有限公司 成都铂石互联网科技做什么的 互联网和黑科技的看法 崇明区互联网教育科技诚信经营 晓花互联网科技有限公司网址 知域互联网科技有限公司大骗子 健康食品互联网创新科技园项目 朱啸虎曾投资哪些互联网科技企业 山东有哪些互联网科技公司 广州燕处互联网科技有限公司 互联网科技创新方面的资料 互联网新科技 互联网通讯科技 互联网科技公司介绍 海南购全球互联网科技 移动互联网科技股 世界互联网领先科技成果获奖 2021互联网科技公司排名 萌小萌互联网科技河南有限公司 广州三三互联网科技有限公司 宁波允成互联网科技有限公司
0