技術分享——一路踩坑構建Dubbo源碼 源碼環境 構建 快速啓動 總結

源碼環境

隨着目前對技術棧的求知慾,也開始入手Dubbo源碼啦!!!
構建源碼第一步:
必備開發環境:Java 1.5 以上的版本;Maven 2.2.1 或者以上的版本;
官網下載源代碼
官網構建文檔學習一下;

構建

上面part介紹了dubbo源碼環境,下面將一步步踩坑構建源碼。雖然上面附屬了官方文檔連接,此處再重複說一下下載步驟:

  • git下載
    命令git clone https://github.com/apache/dubbo.git;
  • maven 構建
    到這裏開始踩坑了,噩夢的開始~
    官網文檔裏可以使用兩種方式構建:是否跳過單元測試

畢竟是第一次構建源碼,故選擇了第一種方式:

  1. 構建時間長,需要構建單元測試;
  2. 可能會存在單測錯誤現象(構建過程可以直接忽略);

直奔主題,毫不意外構建失敗,直接步入今天的主題:踩坑

遇到這種依賴衝突情況,提供一種暴力解決方法:將本地倉庫刪除相關jar包文件,重新下載依賴文件;
由於不跳過單測,構建過程略長,採用了第二種構建方式,如圖

靜靜地等待構建。。。心裏默默祈求成功吧(哈哈~)

  • idea編譯
    命令:mvn idea:idea

繼續等待編譯完成,毫不意外又被摧殘了一下,BUILD FAILURE構建失敗;

心裏想着再堅持一下,快要成功了~,繼續想辦法解決,看到關於本地倉庫的問題,於是乎溪源在本地倉庫中查找沒有對應的Jar包依賴;
第一反應就是下載對應的Jar資源文件,在哪裏下載呢???面向度娘嗎??不不,對於這種資源包缺失問題,網上很少回答的。大家可以動腦思考一下,項目依賴文件來源於中央倉庫,於是乎~阿里雲倉庫嘛;
將jar包下載完成以後,在本地倉庫建立相應的文件夾;

引出一個拓展點:
平時日常開發配置maven時,需要在setting.xml引入阿里雲倉庫,一般我們百度時配置提供的基本是一種老版地址

    <mirror>        <id>alimaven</id>       <name>aliyun maven</name>       <url>http://maven.aliyun.com/nexus/content/groups/public/</url>         <mirrorOf>central</mirrorOf>            </mirror>

在解決上面依賴問題時,發現阿里雲倉庫已經進行了地址更新:

官方配置指南參考:

於是,將本地maven配置setting.xml改成新的倉庫地址:

    <mirror>        <id>alimaven</id>       <name>aliyun maven</name>       <url>https://maven.aliyun.com/repository/public/</url>          <mirrorOf>central</mirrorOf>            </mirror>

以上踩坑似乎跟本地倉庫有關,在這裏分享出來,希望能夠帶給夥伴一種解決思路,遇到類似問題,不要着急,看錯誤日誌,尋找解決方案。

解決完資源依賴問題,再次輸入mvn idea:idea命令,終於迎來勝利的曙光,構建成功啦!

快速啓動

經歷一番折騰後,終於解決了問題,終於要準備開啓dubbo的大門啦,一探究竟~
事實高興的太早了,坑啊~,繼續踩坑。

idea打開dubbo源碼,進入dubbo-demo項目

按照正常步驟,將配置文件中zookeeper註冊中心IP地址改成自己阿里雲公網地址(根據自己情況修改);
滿心歡喜啓動項目~結果:

[11/08/20 08:36:35:376 CST] main  INFO imps.CuratorFrameworkImpl: Default schemaException in thread "main" java.lang.IllegalStateException: zookeeper not connected at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.<init>(CuratorZookeeperClient.java:83)    at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.createZookeeperClient(CuratorZookeeperTransporter.java:26)   at org.apache.dubbo.remoting.zookeeper.support.AbstractZookeeperTransporter.connect(AbstractZookeeperTransporter.java:70)   at org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter$Adaptive.connect(ZookeeperTransporter$Adaptive.java)    at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfiguration.<init>(ZookeeperDynamicConfiguration.java:56)  at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory.createDynamicConfiguration(ZookeeperDynamicConfigurationFactory.java:37)    at org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory.lambda$getDynamicConfiguration$0(AbstractDynamicConfigurationFactory.java:39)    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)  at org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory.getDynamicConfiguration(AbstractDynamicConfigurationFactory.java:39) at org.apache.dubbo.common.config.configcenter.DynamicConfiguration.getDynamicConfiguration(DynamicConfiguration.java:224)  at org.apache.dubbo.config.bootstrap.DubboBootstrap.prepareEnvironment(DubboBootstrap.java:1034)    at org.apache.dubbo.config.bootstrap.DubboBootstrap.startConfigCenter(DubboBootstrap.java:623)

心裏怒罵一聲“此處省略三個字”!!!最終屈服於它,說服自己遇到問題不要慌,分析一波吧;面對第一次處理dubbo源碼,心裏也沒有底啊。但是按照往常遇到問題的處理方式,就是看到上面的日誌,找到第一個報錯的類(爲什麼呢?跟過源碼或者經驗比較豐富的夥伴應該清楚,我們開發代碼一般類似洋蔥,一層套一層,故第一個報錯的類,肯定是出問題的地方);於是乎,選中CuratorZookeeperClient.java:83此類作爲突破目標;

看到了日誌報錯的地方,開始吧~擼起袖子就是幹啊;

跟進源碼我們發現了時間超時問題,我們距離成功解決問題又進了一步;故我們在配置文件中修改其連接時間:
官方文檔:dubbo:registry
接下來就是修改dubbo源碼中的配置文件:
將dubbo-provider.xml\dubbo-consumer.xml中均添加超時時間:

解決完這些問題,心裏已經不敢期望成功運行源代碼了,心裏擔憂~
小心嘗試分別運行provider、consumer主啓動類;

心裏一顆大石頭終於放下來了,踩了一路的坑,終於成功運行demo了。

總結

從構建代碼過程中,發現即使過程中遇到各種坑,希望大家能夠靜下來心,尋找有效日誌,作爲突破目標,一舉攻破!

來源:https://blog.csdn.net/xuan_lu/article/details/107942808?utm_medium=distribute.pc_feed.none-task-blog-personrec_tag-4.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-personrec_tag-4.nonecase&request_id=5f3387eb2405af26f814ed65

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章