使用dubbo你所需要注意的

采用注解方式注入消費者接口實力空指針

注解的方式在現(xiàn)在的項目中由于他的簡潔性越來越被大眾所喜歡,在我們集成dubbox的時候,發(fā)現(xiàn)dubbox支持了注解方式,但是在我們在用注解式集成的時候,發(fā)現(xiàn)消費者的對象在沒有注入進去,一直都是報空指針異常.

代碼如下:

/**
 * <p>
 * bug反饋業(yè)務接口
 * </p>
 *
 * @author wangguangdong
 * @version 1.0
 * @Date 2016年10月12日16:18:30
 */
@AuthAnnotation
@Controller
public class BugReportResource {

    private static final Logger LOG = Logger.getLogger(BugReportResource.class);
    @Reference(version = "1.0.0",interfaceClass = BugReportService.class)
    BugReportService bugReportService;
}

經(jīng)過樓主辛苦的查找原因,后來終于找到問題所在:
在spirng進行實例掃描的時候根本無法識別dubbo中的注解@Reference ,同時,在dubbo掃描的時候也無法識別Spring @Controller ,所以兩個框架的掃描順序要排列好,如果先掃了controller,這時候把控制器都實例化好了,再掃dubbo的服務,就會出現(xiàn)空指針,因為在實例化的時候是沒有對應的消費者的實例的,所以就會造成無法注入,這也就是為什么在我們調用消費者服務的時候會造成空指針.

下面是樓主編排成功的代碼.

    <mvc:annotation-driven />
    
    <!-- 查找xxx路徑下所有@Controller 注釋類,添加與項目相關的controller -->
    
    <dubbo:annotation package="XXX.XXX.XXX.controller" />
    
    <context:component-scan base-package="XXX.XXX.XXX.controller"/>

然后在查閱資料之后,樓主又發(fā)現(xiàn)了另一種解決辦法:
在一個spring對象中注入dubbo消費者實例,然后在controller中注入這個服務實例即可,這種方法不受dubbo和spirng掃描順序的影響.其實在項目中我們可能也會有這樣的設計(有些的架構改進會進行這樣的設計,比如我吧所有的服務細粒度化拆分,并作為提供者注冊給dubbo的server,然后我在消費者端多架構一個組合服務層(業(yè)務編排service層),進行dubbo子服務的組合,再講組合后的服務注入到controller中供業(yè)務側使用)

    @Component
    public class DubboSupport
    {
        @Reference(version = "1.0.0",interfaceClass = BugReportService.class)
         BugReportService bugReportService;     
        public BugReportService getBugReportService(){
            return bugReportService;
        }
    }

Dubbo超時和重連

dubbo啟動時默認有重試機制和超時機制,某些業(yè)務場景下,如果不注意配置超時和重試,可能會引起一些異常霹陡。

超時機制的規(guī)則是如果在一定的時間內,provider沒有返回瞭吃,則認為本次調用失敗

重試機制在出現(xiàn)調用失敗時,會再次調用尊蚁。如果在配置的調用次數(shù)內都失敗或粮,則認為此次請求異常遗增,拋出異常结蟋。(dubbo默認重試2次)

如果出現(xiàn)超時招刹,通常是業(yè)務處理太慢或者發(fā)送io阻塞,可在服務提供方執(zhí)行:jstack PID > jstack.log 分析線程都卡在哪個方法調用上妥粟,這里就是慢的原因审丘。如果這個服務接口不能調優(yōu)性能,請將timeout設大勾给。

超時設置

DUBBO消費端設置超時時間需要根據(jù)業(yè)務實際情況來設定滩报,如果設置的時間太短,一些復雜業(yè)務需要很長時間完成锦秒,導致在設定的超時時間內無法完成正常的業(yè)務處理露泊。這樣消費端達到超時時間,那么dubbo會進行重試機制旅择,不合理的重試在一些特殊的業(yè)務場景下可能會引發(fā)很多問題惭笑,需要合理設置接口超時時間。

比如發(fā)送郵件生真,可能就會發(fā)出多份重復郵件沉噩,執(zhí)行注冊請求時,就會插入多條重復的注冊數(shù)據(jù)柱蟀。

(1)合理配置超時和重連的思路

  1. 對于核心的服務中心川蒙,去除dubbo超時重試機制,并重新評估設置超時時間长已。
  2. 業(yè)務處理代碼必須放在服務端畜眨,客戶端只做參數(shù)驗證和服務調用,不涉及業(yè)務流程處理

(2)Dubbo超時和重連配置示例

    <!-- 服務調用超時設置為6秒,超時不重試--> 
    <dubbo:service interface="com.provider.service.DemoService" ref="demoService"  retries="0" timeout="5000"/>

(3)Dubbo消費者端統(tǒng)一的超時和重連配置

    <!--統(tǒng)一的消費者配置-->
    <dubbo:consumer timeout="30000" retries="0" version="1.0.0"/>

重連機制

dubbo在調用服務不成功時术瓮,默認會重試2次康聂。Dubbo的路由機制,會把超時的請求路由到其他機器上胞四,而不是本機嘗試恬汁,所以 dubbo的重試機器也能一定程度的保證服務的質量。但是如果不合理的配置重試次數(shù)辜伟,當失敗時會進行重試多次氓侧,這樣在某個時間點出現(xiàn)性能問題,調用方再連續(xù)重復調用导狡,系統(tǒng)請求變?yōu)檎V档膔etries倍约巷,系統(tǒng)壓力會大增,容易引起服務雪崩旱捧,需要根據(jù)業(yè)務情況規(guī)劃好如何進行異常處理独郎,何時進行重試。

在重試發(fā)送的時候也可能會出現(xiàn)這樣的問題:
比如有一個bug反饋,但是因為數(shù)據(jù)庫io瓶頸,這時候這個服務阻塞了,然后過了一會查看數(shù)據(jù)庫里有3條除了id外剩下都一樣的數(shù)據(jù)(id是在服務提供者里生成的,這里只做異常例子舉例).

這就是重試機制下,業(yè)務不合理的設計所造成的坑,這時候我們處理的方式有兩種:

  1. 合理規(guī)劃業(yè)務(例如id放在服務上游生成,數(shù)據(jù)庫主鍵唯一的機制)
  2. 吧服務增加冪等性設置(例如接口中增加消息id)

附帶上使用dubbo你所需要的mavne依賴

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.8.4</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.101tec</groupId>
                    <artifactId>zkclient</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.7</version>
        </dependency>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市囚聚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌标锄,老刑警劉巖顽铸,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異料皇,居然都是意外死亡谓松,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門践剂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鬼譬,“玉大人,你說我怎么就攤上這事逊脯∮胖剩” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵军洼,是天一觀的道長巩螃。 經(jīng)常有香客問我,道長匕争,這世上最難降的妖魔是什么避乏? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮甘桑,結果婚禮上拍皮,老公的妹妹穿的比我還像新娘。我一直安慰自己跑杭,他們只是感情好铆帽,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艘蹋,像睡著了一般锄贼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上女阀,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天宅荤,我揣著相機與錄音,去河邊找鬼浸策。 笑死冯键,一個胖子當著我的面吹牛,可吹牛的內容都是我干的庸汗。 我是一名探鬼主播惫确,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了改化?” 一聲冷哼從身側響起掩蛤,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陈肛,沒想到半個月后揍鸟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡句旱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年阳藻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谈撒。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡腥泥,死狀恐怖,靈堂內的尸體忽然破棺而出啃匿,到底是詐尸還是另有隱情蛔外,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布溯乒,位于F島的核電站冒萄,受9級特大地震影響,放射性物質發(fā)生泄漏橙数。R本人自食惡果不足惜尊流,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灯帮。 院中可真熱鬧崖技,春花似錦、人聲如沸钟哥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腻贰。三九已至吁恍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間播演,已是汗流浹背冀瓦。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留写烤,地道東北人翼闽。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像洲炊,于是被迫代替她去往敵國和親感局。 傳聞我的和親對象是個殘疾皇子尼啡,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)询微,斷路器崖瞭,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • SuperAgent SuperAgent是輕量級更為優(yōu)化的ajax API,對比大量糟糕的現(xiàn)存的API撑毛,Supe...
    莫莫小熊閱讀 6,343評論 0 2
  • 最近代态,總有種不太想出門的感覺,因為感覺自己沒有漂亮衣服穿疹吃。 不知道會有多少姑娘跟我有這樣相似的想法蹦疑,沒有把自己拾掇...
    七七獸閱讀 2,200評論 0 0
  • [摘要]把一塊泥,捻一個你萨驶,塑一個我歉摧。將咱兩個人一起打碎,用水調和腔呜,再捻一個你叁温,塑一個我,我泥中有你核畴,你泥中有我膝但。...
    Escort閱讀 350評論 0 1
  • 思索了好久,十一還是回了家谤草。 北國的秋天已經(jīng)很多年存在回憶里了跟束,每年只是到了年底才會例行化的回家,剩下的日子便是屬...
    時間的光閱讀 347評論 0 1