天天看點

Spring Boot 中如何使用 Dubbo Activate 擴充點

摘要: 原創出處 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&lt;?&gt; 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 等。

歡迎掃一掃我的公衆号關注 — 及時得到部落格訂閱哦!

Spring Boot 中如何使用 Dubbo Activate 擴充點