转载

原 荐 Dubbo的filter按需加载

后端之路 dubbo

正文

原 荐 Dubbo的filter按需加载

Dubbo的filter按需加载

原 荐 Dubbo的filter按需加载
  Mr_Qi 发布于 29分钟前

字数 559

阅读 5

收藏 0

Dubbo

参与百度AI开发者大赛赢75万奖金+25万奖品,(提供教程)加群:418589053 >>> 原 荐 Dubbo的filter按需加载

背景

一天之内 两个小伙伴问我关于filter的按需加载的机制 有必要这边记录一下

关于filter的说明

dubbo源码系列之filter的前生

dubbo源码系列之filter的今世

分析

关于dubbo中Activate的注解中存在如下几个属性

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Activate {
    /**
     * Group过滤条件。
     * <br />
     * 包含{@link ExtensionLoader#getActivateExtension}的group参数给的值,则返回扩展。
     * <br />
     * 如没有Group设置,则不过滤。
     */
    String[] group() default {};
 
    /**
     * Key过滤条件。包含{@link ExtensionLoader#getActivateExtension}的URL的参数Key中有,则返回扩展。
     * <p />
     * 示例:<br/>
     * 注解的值 <code>@Activate("cache,validatioin")</code>,
     * 则{@link ExtensionLoader#getActivateExtension}的URL的参数有<code>cache</code>Key,或是<code>validatioin</code>则返回扩展。
     * <br/>
     * 如没有设置,则不过滤。
     */
    String[] value() default {};
 
    /**
     * 排序信息,可以不提供。
     */
    String[] before() default {};
 
    /**
     * 排序信息,可以不提供。
     */
    String[] after() default {};
 
    /**
     * 排序信息,可以不提供。
     */
    int order() default 0;
}

其中 before,after,order可以用来调整filter的顺序

而group用来描述生效的side【provider,consumer】

public static final String  PROVIDER                           = "provider";
 
public static final String  CONSUMER                           = "consumer";

那么还剩下一个关键的属性value

private boolean isActive(Activate activate, URL url) {
    String[] keys = activate.value();
    if (keys == null || keys.length == 0) {
        return true;
    }
    for (String key : keys) {
        for (Map.Entry<String, String> entry : url.getParameters().entrySet()) {
            String k = entry.getKey();
            String v = entry.getValue();
            if ((k.equals(key) || k.endsWith("." + key))
                    && ConfigUtils.isNotEmpty(v)) {
                return true;
            }
        }
    }
    return false;
}

可以看出当value为空或者size为0那么此时isActive就返回true 也就是说filter将会生效。

那么当url中参数包含对应的value的值或者以.XXX【XXX为对应的参数值】也将生效

其他场景也就是isActivate返回false 将不会生效~

那么如何设置对应的filter的参数呢???

protected <T> ServiceBean<T> registerService(RegistryConfig registryConfig, ApplicationConfig applicationConfig, ProviderConfig providerConfig, ProtocolConfig protocolConfig, Dubbo dubbo, Class<T> interfaceClazz, T t) {
    ServiceBean<T> ref = new ServiceBean<>();
    ref.setInterface(interfaceClazz);
    ref.setRegistry(registryConfig);
    ref.setApplication(applicationConfig);
    ref.setProvider(providerConfig);
    ref.setRef(t);
    ref.setProtocol(protocolConfig);
    ref.setGroup(dubbo.getGroup());
    ref.setFilter("clientProvider");
    return ref;
}

filter可以增加参数了~

© 著作权归作者所有

共有人打赏支持

原 荐 Dubbo的filter按需加载

Mr_Qi

粉丝 266

博文 331

码字总数 346601

作品 0

南京

程序员

相关文章 最新文章

Dubbo的SPI实现以及与JDK实现的区别

在 Java 里, 为了规范开发,制定了大量的「规范」与「标准」,这些上层的内容,大多是以接口的形式提供出来。那这些接口最终实现是谁呢,在哪里呢? 规范并不关心这个。 所谓规范,是指定了...

小红牛

06/28

0

0

原 荐 Dubbo的filter按需加载
dubbo源码解析(三)

这个地方非常重要,dubbo机制里面日志记录、超时等等功能都是在这一部分实现的。 如上一节在介绍扩展点加载时所述,在生成 Protocol 的 invoker 时,实际上使用了 装饰模式,第一个是 filter...

taikr

2016/12/15

15

0

从ExtensionLoader看Dubbo插件化

欢迎加入DUBBO交流群:259566260 之前很多人问我Dubbo插件化是怎么实现的,我都是简单回答SPI。了解SPI的人知道,它只是提供一种协议,并没有提供相关插件化实施的接口,不像OSGI那样有一成套...

Bieber

2015/05/23

0

14

dubbo服务注册流程

服务暴与注册流程: 1、容器启动时会根据注册DubboBeanDefinitionParser的解析器解析dubbo相关的配置(ServiceBean、ProtocolConfig、ProviderConfig、ConsumerConfig等)。 2、当Spring容器启...

halbert918

2016/02/14

149

0

Dubbo 2.0.9 发布,阿里巴巴开源服务框架

阿里巴巴开源服务框架Dubbo2.0.9版本发布了,该版本增加了简易监控中心界面,以及修复了一些BUG。 Dubbo首页:http://code.alibabatech.com/wiki/display/dubbo/Home 下载地址:http://code...

红薯

2011/12/14

15.3K

6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java多线程之内存可见性

前言: 谈到多线程,不可避免的就会谈到数据争用的问题,而要解决数据争用,就需要学习内存可见性相关的知识 一、共享变量在线程间的可见性: 首先对相关的几个名词进行解释: 1. 什么是“可...

lurenjiapp

4分钟前

0

0

原 荐 Dubbo的filter按需加载
Springboot 常用注解

Springboot 常用注解 @SpringBootApplication: 包含@Configuration、@EnableAutoConfiguration、@ComponentScan 通常用在主类上。 @Repository: 用于标注数据访问组件,即DAO组件。 @Service...

DemonsI

26分钟前

0

0

go语言中操作mysql的方法

需要下载指定的golang的mysql驱动包> go get github.com/go-sql-driver/mysql下面的例子:package main; import ( "database/sql" _ "github.com/go-sql-driver/mys...

刺猬一号

27分钟前

0

0

使用了 PHP Code Sniffer 未使用的参数 Unused parameter

这样可以解决,感觉自己是个逗比……

郭大鹏

28分钟前

0

0

原 荐 Dubbo的filter按需加载
Dubbo的filter按需加载

背景 一天之内 两个小伙伴问我关于filter的按需加载的机制 有必要这边记录一下 关于filter的说明 dubbo源码系列之filter的前生 dubbo源码系列之filter的今世 分析 关于dubbo中Activate的注解...

Mr_Qi

29分钟前

5

0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

原文  https://my.oschina.net/qixiaobo025/blog/1929832
正文到此结束
Loading...