摘要: 原創出處 www.bysocket.com 「泥瓦匠bysocket 」歡迎轉載,保留摘要,謝謝!
『 公司的核心競争力在于創新 – 《啟示錄》 』
本文提綱
一、什麼是 dubbo activate 注解
二、使用 dubbo activate
三、小結
運作環境:jdk 7 或 8,maven 3.0+
技術棧:springboot 1.5+、dubbo 2.5+、zookeeper 3.3+
@activate 是一個 duboo 架構提供的注解。在 dubbo 官方文檔上有記載:
對于集合類擴充點,比如:filter, invokerlistener, exportlistener, telnethandler, statuschecker等, 可以同時加載多個實作,此時,可以用自動激活來簡化配置。
用 @activate 來實作一些 filter ,可以具體如下:
1. 無條件自動激活
直接使用預設的注解即可
1
2
3
4
5
6
7
<code>import</code> <code>com.alibaba.dubbo.common.extension.activate;</code>
<code>import</code> <code>com.alibaba.dubbo.rpc.filter;</code>
<code> </code>
<code>@activate</code> <code>// 無條件自動激活</code>
<code>public</code> <code>class</code> <code>xxxfilter</code><code>implements</code> <code>filter {</code>
<code> </code><code>// ...</code>
<code>}</code>
2. 配置 xxx 參數,并且參數為有效值時激活,比如配了cache=”lru”,自動激活 cachefilter
<code>@activate</code><code>(</code><code>"xxx"</code><code>)</code><code>// 當配置了xxx參數,并且參數為有效值時激活,比如配了cache="lru",自動激活cachefilter。</code>
3. 隻對提供方激活,group 可選 provider 或 consumer
8
<code>@activate</code><code>(group =</code><code>"provider"</code><code>, value =</code><code>"xxx"</code><code>)</code>
<code>// 隻對提供方激活,group可選"provider"或"consumer"</code>
基于以前的 springboot-dubbo-server 和 springboot-dubbo-client 工程,github 位址:https://github.com/jeffli1993/springboot-learning-example 。
這裡我們在消費端,既 springboot-dubbo-client 工程上添加一個 filter。代碼如下:
9
10
11
12
13
14
15
16
17
18
<code>package</code> <code>com.xxx;</code>
<code>import</code> <code>com.alibaba.dubbo.rpc.invoker;</code>
<code>import</code> <code>com.alibaba.dubbo.rpc.invocation;</code>
<code>import</code> <code>com.alibaba.dubbo.rpc.result;</code>
<code>import</code> <code>com.alibaba.dubbo.rpc.rpcexception;</code>
<code> </code><code>public</code> <code>result invoke(invoker<?> invoker,</code>
<code>invocation invocation)</code><code>throws</code> <code>rpcexception {</code>
<code> </code><code>// before filter ...</code>
<code> </code><code>result result = invoker.invoke(invocation);</code>
<code> </code><code>// after filter ...</code>
<code> </code><code>return</code> <code>result;</code>
<code> </code><code>}</code>
啟動 client 工程發現,console 報錯,出現:
<code>caused by: java.lang.illegalstateexception: no such extension dubboconsumerfilter</code><code>for</code> <code>filter</code><code>/com</code><code>.alibaba.dubbo.rpc.filter</code>
發現這個 filter 初始化時,報錯了。證明沒有配置成功。
原來根據官方文檔中描述,我們需要配置擴充點配置檔案。
在 meta-inf 中配置:
<code>xxx=com.xxx.xxxfilter</code>
maven 項目目錄結構
<code>src</code>
<code> </code><code>|-main</code>
<code> </code><code>|-java</code>
<code> </code><code>|-com</code>
<code> </code><code>|-xxx</code>
<code> </code><code>|-xxxfilter.java (實作filter接口)</code>
<code> </code><code>|-resources</code>
<code> </code><code>|-meta-inf</code>
<code> </code><code>|-dubbo</code>
<code> </code><code>|-com.alibaba.dubbo.rpc.filter (純文字檔案,内容為:xxx=com.xxx.xxxfilter)</code>
調用攔截擴充的應用場景很多,比如黑白名單,比如 ip 等。
歡迎掃一掃我的公衆号關注 — 及時得到部落格訂閱哦!