dubbo-Reference注解改進

1.dubbo服務過多引用的問題

1.1 dubbo服務以xml配置消費者

由于引用多個dubbo服務時锦聊,在未使用前無法得知需要使用哪個接口丽柿,如果以xml配置的形式來調(diào)用,應該如下代碼

代碼示例1

<dubbo:reference interface="com.xxx.xxx.xxxService" timeout="300000"/>

1.2 dubbo服務膨脹的問題

由于需求不斷變更,引用的dubbo服務不斷增多,這時候配置將會如下

代碼示例2

<dubbo:reference interface="com.xxx.xxx.xxxService1" timeout="300000"/>
<dubbo:reference interface="com.xxx.xxx.xxxService2" timeout="300000"/>
<dubbo:reference interface="com.xxx.xxx.xxxService3" timeout="300000"/>
<dubbo:reference interface="com.xxx.xxx.xxxService4" timeout="300000"/>
<dubbo:reference interface="com.xxx.xxx.xxxService5" timeout="300000"/>
......

實際項目中引用的服務會更多,維護該xml的數(shù)量將非常龐大,不利于團隊之間的合作開發(fā)

1.3 使用Reference注解的形式

使用注解后,就可以在實際情況下引用即可,非常方便

代碼示例3

@Reference
private UserService userService;

2.Reference注解的問題

  1. 當需要配置某個模塊的version和group時,希望能夠統(tǒng)一修改,與配置中心綁定
  2. 使用注解時,當在父類使用該注解時不生效灶壶,因為Reference注解并未對父類方法和字段進行解析

代碼示例4

@Reference(version = "1.0",group = "app")
private UserService userService;

@Reference(version = "userModule.version",group = "userModule.group")
private UserService userService;

//此為示例代碼,Value注解應該能夠理解
@Value("userModule.version")
private String version;

2.1 改造的切入點AnnotationBean

Reference注解由AnnotationBean進行解析,所以第一步是對AnnotationBean進行改造.

思路如下:

  1. 將version和group相關需要的全局配置改造成與配置中心相關聯(lián)
  2. xml去除dubbo:annotation配置
  3. 同時對父類方法和字段進行解析

3.動態(tài)獲取dubbo接口

有時候需要在某些場景哥捕,靜態(tài)獲取dubbo接口,就像Spring中ApplicationContext中getBean方法一樣
實際其內(nèi)部還是構造一個ReferenceBean對象

代碼示例5

public static <T> T getDubboBean(Class<T> referenceClass,String version) {
    if (referenceClass == null) {
        throw new IllegalStateException("請輸入接口類型");
    } else if (!referenceClass.isInterface()) {
        throw new IllegalStateException("The @Reference undefined interfaceClass or interfaceName, and the property type " + referenceClass.getName() + " is not a interface.");
    }
    String interfaceName = referenceClass.getName();
    String key = interfaceName;
    ReferenceBean<?> referenceConfig = referenceConfigs.get(key);
    if (referenceConfig == null) {
        referenceConfig = new ReferenceBean<Object>();
        referenceConfig.setInterfaceClass(referenceClass);
    }
    if (SpringContextUtil.getApplicationContext() != null) {
        referenceConfig.setApplicationContext(SpringContextUtil.getApplicationContext());
        try {
            referenceConfig.afterPropertiesSet();
        } catch (RuntimeException e) {
            throw (RuntimeException) e;
        } catch (Exception e) {
            throw new IllegalStateException(e.getMessage(), e);
        }
    }
    referenceConfigs.putIfAbsent(key, referenceConfig);
    referenceConfig = referenceConfigs.get(key);
    referenceConfig.setVersion(version);

    //獲取配置中心配置
    version=SpringPropertiesUtil.getPropertiestValue("dubbo.common.version");
    String group=SpringPropertiesUtil.getPropertiestValue("dubbo.common.group");

    if(SysStringUtils.isNotEmpty(version))
    {
        referenceConfig.setVersion(version);
    }

    if(SysStringUtils.isNotEmpty(group))
    {
        referenceConfig.setGroup(group);
    }

    T obj=null;
    try {
        if(referenceConfig!=null) {
            obj=(T) referenceConfig.get();
        }
    } catch (Exception e) {

    }
    return obj;
}

以上方案為2.5.3版本中的方案
Reference注解已經(jīng)在dubbo新版本中標記為廢棄,所以提早記錄下

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撰筷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子畦徘,更是在濱河造成了極大的恐慌毕籽,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件井辆,死亡現(xiàn)場離奇詭異关筒,居然都是意外死亡,警方通過查閱死者的電腦和手機杯缺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門蒸播,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夺谁,你說我怎么就攤上這事廉赔。” “怎么了匾鸥?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵蜡塌,是天一觀的道長。 經(jīng)常有香客問我勿负,道長馏艾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任奴愉,我火速辦了婚禮琅摩,結果婚禮上,老公的妹妹穿的比我還像新娘锭硼。我一直安慰自己房资,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布檀头。 她就那樣靜靜地躺著轰异,像睡著了一般。 火紅的嫁衣襯著肌膚如雪暑始。 梳的紋絲不亂的頭發(fā)上搭独,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音廊镜,去河邊找鬼牙肝。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的配椭。 我是一名探鬼主播虫溜,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颂郎!你這毒婦竟也來了吼渡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤乓序,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坎背,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體替劈,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年得滤,在試婚紗的時候發(fā)現(xiàn)自己被綠了陨献。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡懂更,死狀恐怖眨业,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沮协,我是刑警寧澤龄捡,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站慷暂,受9級特大地震影響聘殖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜行瑞,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一奸腺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧血久,春花似錦突照、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至副砍,卻和暖如春衔肢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豁翎。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工角骤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓邦尊,卻偏偏與公主長得像背桐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蝉揍,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容