您的位置:首页 > 编程语言 > Java开发

Spring Boot 中如何使用 Dubbo Activate 扩展点

2017-04-18 12:23 609 查看
摘要:原创出处www.bysocket.com「泥瓦匠BYSocket」欢迎转载,保留摘要,谢谢!

『公司的核心竞争力在于创新–《启示录》』

继续上一篇:《Springboot整合Dubbo/ZooKeeper》,在SpringBoot使用DubboActivate扩展点。这是一个群友问的,我总结下,分享给更多人。

本文提纲
一、什么是DubboActivate注解
二、使用DubboActivate
三、小结

运行环境:JDK7或8,Maven3.0+
技术栈:SpringBoot1.5+、Dubbo2.5+、ZooKeeper3.3+

一、什么是DubboActivate注解

@Activate是一个Duboo框架提供的注解。在Dubbo官方文档上有记载:
对于集合类扩展点,比如:Filter,InvokerListener,ExportListener,TelnetHandler,StatusChecker等,可以同时加载多个实现,此时,可以用自动激活来简化配置。

用@Activate来实现一些Filter,可以具体如下:
1.无条件自动激活
直接使用默认的注解即可

1
2
3
4
5
6
7
importcom.alibaba.dubbo.common.extension.Activate;
importcom.alibaba.dubbo.rpc.Filter;

@Activate//无条件自动激活
publicclassXxxFilterimplementsFilter{
//...
}
2.配置xxx参数,并且参数为有效值时激活,比如配了cache=”lru”,自动激活CacheFilter

1
2
3
4
5
6
7
importcom.alibaba.dubbo.common.extension.Activate;
importcom.alibaba.dubbo.rpc.Filter;

@Activate("xxx")//当配置了xxx参数,并且参数为有效值时激活,比如配了cache="lru",自动激活CacheFilter。
publicclassXxxFilterimplementsFilter{
//...
}
3.只对提供方激活,group可选provider或consumer

1
2
3
4
5
6
7
8
importcom.alibaba.dubbo.common.extension.Activate;
importcom.alibaba.dubbo.rpc.Filter;

@Activate(group="provider",value="xxx")
//只对提供方激活,group可选"provider"或"consumer"
publicclassXxxFilterimplementsFilter{
//...
}

二、使用DubboActivate注解

基于以前的springboot-dubbo-server和springboot-dubbo-client工程,GitHub地址:https://github.com/JeffLi1993/springboot-learning-example。

这里我们在消费端,既springboot-dubbo-client工程上添加一个Filter。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
packagecom.xxx;

importcom.alibaba.dubbo.rpc.Filter;
importcom.alibaba.dubbo.rpc.Invoker;
importcom.alibaba.dubbo.rpc.Invocation;
importcom.alibaba.dubbo.rpc.Result;
importcom.alibaba.dubbo.rpc.RpcException;


publicclassXxxFilterimplementsFilter{
publicResultinvoke(Invoker<?>invoker,
Invocationinvocation)throwsRpcException{
//beforefilter...
Resultresult=invoker.invoke(invocation);
//afterfilter...
returnresult;
}
}
启动client工程发现,Console报错,出现:

1
Causedby:java.lang.IllegalStateException:NosuchextensiondubboConsumerFilterforfilter/com.alibaba.dubbo.rpc.Filter
发现这个Filter初始化时,报错了。证明没有配置成功。

原来根据官方文档中描述,我们需要配置扩展点配置文件。

在META-INF中配置:

1
xxx=com.xxx.XxxFilter
Maven项目目录结构

1
2
3
4
5
6
7
8
9
10
src
|-main
|-java
|-com
|-xxx
|-XxxFilter.java(实现Filter接口)
|-resources
|-META-INF
|-dubbo
|-com.alibaba.dubbo.rpc.Filter(纯文本文件,内容为:xxx=com.xxx.XxxFilter)

三、小结

调用拦截扩展的应用场景很多,比如黑白名单,比如IP等。

欢迎扫一扫我的公众号关注—及时得到博客订阅哦!
http://www.bysocket.com/—
https://github.com/JeffLi1993—



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: