正文
Dubbo的filter按需加载
顶
原
荐
字数 559
阅读 5
收藏 0
Dubbo
参与百度AI开发者大赛赢75万奖金+25万奖品,(提供教程)加群:418589053 >>>
一天之内 两个小伙伴问我关于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可以增加参数了~
© 著作权归作者所有
共有人打赏支持
粉丝 266
博文 331
码字总数 346601
作品 0
南京
程序员
相关文章 最新文章
在 Java 里, 为了规范开发,制定了大量的「规范」与「标准」,这些上层的内容,大多是以接口的形式提供出来。那这些接口最终实现是谁呢,在哪里呢? 规范并不关心这个。 所谓规范,是指定了...
小红牛
06/28
0
0
这个地方非常重要,dubbo机制里面日志记录、超时等等功能都是在这一部分实现的。 如上一节在介绍扩展点加载时所述,在生成 Protocol 的 invoker 时,实际上使用了 装饰模式,第一个是 filter...
taikr
2016/12/15
15
0
欢迎加入DUBBO交流群:259566260 之前很多人问我Dubbo插件化是怎么实现的,我都是简单回答SPI。了解SPI的人知道,它只是提供一种协议,并没有提供相关插件化实施的接口,不像OSGI那样有一成套...
Bieber
2015/05/23
0
14
服务暴与注册流程: 1、容器启动时会根据注册DubboBeanDefinitionParser的解析器解析dubbo相关的配置(ServiceBean、ProtocolConfig、ProviderConfig、ConsumerConfig等)。 2、当Spring容器启...
halbert918
2016/02/14
149
0
阿里巴巴开源服务框架Dubbo2.0.9版本发布了,该版本增加了简易监控中心界面,以及修复了一些BUG。 Dubbo首页:http://code.alibabatech.com/wiki/display/dubbo/Home 下载地址:http://code...
红薯
2011/12/14
15.3K
6
没有更多内容
加载失败,请刷新页面
加载更多下一页
前言: 谈到多线程,不可避免的就会谈到数据争用的问题,而要解决数据争用,就需要学习内存可见性相关的知识 一、共享变量在线程间的可见性: 首先对相关的几个名词进行解释: 1. 什么是“可...
lurenjiapp
4分钟前
0
0
Springboot 常用注解 @SpringBootApplication: 包含@Configuration、@EnableAutoConfiguration、@ComponentScan 通常用在主类上。 @Repository: 用于标注数据访问组件,即DAO组件。 @Service...
DemonsI
26分钟前
0
0
需要下载指定的golang的mysql驱动包> go get github.com/go-sql-driver/mysql下面的例子:package main; import ( "database/sql" _ "github.com/go-sql-driver/mys...
刺猬一号
27分钟前
0
0
这样可以解决,感觉自己是个逗比……
郭大鹏
28分钟前
0
0
背景 一天之内 两个小伙伴问我关于filter的按需加载的机制 有必要这边记录一下 关于filter的说明 dubbo源码系列之filter的前生 dubbo源码系列之filter的今世 分析 关于dubbo中Activate的注解...
Mr_Qi
29分钟前
5
0
没有更多内容
加载失败,请刷新页面
加载更多下一页