技術分享——一路踩坑構建Dubbo源碼

2020-09-03 Java成長催化師

源碼環境

隨著目前對技術棧的求知慾,也開始入手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 &34; 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

相關焦點

  • 那些年,踩過dubbo的坑。僅此記錄
    注意:需要相關資料可以關注私信構建上面part介紹了dubbo源碼環境,下面將一步步踩坑構建源碼。到這裡開始踩坑了,噩夢的開始~官網文檔裡可以使用兩種方式構建:是否跳過單元測試;畢竟是第一次構建源碼,選擇了第一種方式:構建時間長,需要構建單元測試;可能會存在單測錯誤現象(構建過程可以直接忽略);直奔主題,毫不意外構建失敗,直接步入今天的主題:踩坑
  • dubbo學習之源碼創建屬於自己的dubbo-demo
    推薦學習 環境搭建藉助官網的快速啟動手冊,以及源碼包路徑;分別在dubbo-demo-interfacemodule>這個模塊下東西比較多,目前只要是溪源學習SPI,Adaptive相關知識用到,大家可以暫時忽略,可以參考溪源分享的代碼和目錄結構創建
  • Dubbo源碼學習——從源碼看看dubbo對netty的使用
    前言前段時間,從頭開始將netty源碼了解了個大概,但都是原理上理解。剛好博主對dubbo框架了解過一些,這次就以dubbo框架為例,詳細看看dubbo這種出色的開源框架是如何使用netty的,又是如何與框架本身邏輯進行融合的。
  • 「DUBBO系列」並發控制實現原理與源碼分析
    本文我們介紹生產者和消費者並發控制怎樣配置並且在源碼層面分析並發控制實現原理。:protocol name=&34; port=&34; /> <dubbo:service executes=&34; interface=&34; ref=&34; /></beans>2.2 源碼分析ExecuteLimitFilter過濾器是生產者並發控制核心
  • 俯瞰Dubbo全局,閱讀源碼前必須掌握這些!!
    搭建Dubbo源碼環境我們可以使用如下命令將github的源碼下載的本地。git clone https://github.com/apache/dubbo.git 接下來,將Dubbo的源碼切換到2.7.8git checkout -b dubbo-2.7.8 dubbo-2.7.8 使用Maven進行編譯mvn clean install -Dmaven.test.skip=true
  • 「DUBBO系列」服務降級源碼分析
    請點擊【關注】獲取更多網際網路和技術乾貨,頭條號IT徐胖子原創本文請勿轉載,感謝支持1 文章概述假設服務生產者提供A服務,但是A服務並不穩定,那麼如果服務消費者無法正常消費我們通過分析源碼講解服務降級策略,首先看一個消費者代碼實例。
  • Dubbo源碼解析之服務端Provider
    分析原理這裡只是分析下大概原理,給各位同學先帶來帶你感受,實際步驟後面分析源碼時候再細說在進行分析之前我們思考一下,當我們不使用RPC框架和SpringCloud的時候,如果我們要調用其他第三方的服務時候,我們會怎麼處理呢?通過下面這種方式每次調用時候構建一個HTTP的請求。
  • 源碼講解Dubbo服務暴露過程
    上一篇,我們講解了Dubbo服務調用的整體過程,本節我們源碼講解一下Dubbo服務暴露過程。會註冊服務的元數據(默認註冊中心使用Zookeeper),可以查看內置的擴展點實現:dubbo=com.alibaba.dubbo.registry.dubbo.DubboRegistryFactorymulticast=com.alibaba.dubbo.registry.multicast.MulticastRegistryFactoryzookeeper
  • dubbo實戰之四:管理控制臺dubbo-admin
    歡迎訪問我的GitHubhttps://github.com/zq2599/blog_demos內容:所有原創文章分類和匯總,及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;
  • 「DUBBO系列」鏈路跟蹤實現原理與源碼分析
    請點擊【關注】獲取更多網際網路和技術乾貨,頭條號IT徐胖子原創本文請勿轉載,感謝支持1 隱式傳參我們首先分析一個DUBBO隱式傳參實例,主要介紹隱式傳參基本使用方法。1.1 消費者配置<beans> <dubbo:registry address=&34; /> <dubbo:reference id=&34; interface=&34; /><beans>
  • 還在外貿公司網站源碼上踩坑嗎?
    源碼的優化也是外貿網站優化中必備要素之一,搜尋引擎對簡潔的源碼更是情有獨鐘的,所以優化人員需要對網站的源碼進行精簡和優化。簡潔的源碼不止有利於SEO優化,還關係到網站的加載速度,對用戶的體驗是至關重要。
  • 阿里P7終於講完了JDK+Spring+mybatis+Dubbo+SpringMvc+Netty源碼
    前言這裡普及一下,每個公司都有職別定級系統,阿里也是,技術崗以 P 定級,一般校招 P5, 社招 P6 起。其實閱讀源碼也是有很多訣竅的,這裡分享幾點心得:首先要會用。今天給大家分享的是,阿里P7大牛整理總結的六大內容:JDK+Spring+mybatis+Dubbo+SpringMvc+Netty源碼解析學習路線和pdf,希望大家能夠喜歡!!!
  • 基於shiro、dubbo、zookeeper開發快速構建企業級的web應用系統
    基於springboot、mybatisplus、shiro、dubbo、zookeeper、log4j、layuicms2.0、mysql5.6、redis、jdk1.8開發而成,內置代碼生成器,能夠快速生成
  • 餓了麼7年架構師Dubbo源碼剖析筆記分享
    點關注,不迷路;持續更新Java相關技術及資訊!!!更加開放:由於使用了多語言 API,所以開發人員可以根據需要實現的功能,自由選用最適合的語言和技術。1.2、所面臨的挑戰複雜性和效率問題是基於微服務的架構所面臨的挑戰。
  • Dubbo-go 源碼筆記(一)Server 端開啟服務過程
    當拿到一款框架之後,一種不錯的源碼閱讀方式大致如下:從運行最基礎的 helloworld demo 源碼開始 —> 再查看配置文件 —> 開啟各種依賴服務(比如zk、consul) —> 開啟服務端 —> 再到通過 client 調用服務端 —> 列印完整請求日誌和回包
  • springboot整合dubbo+zookeeper(三)
    -- dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.7</version>
  • 「DUBBO系列」集群容錯策略Failsafe源碼分析
    請點擊【關注】獲取更多網際網路和技術乾貨,頭條號IT徐胖子原創本文請勿轉載,感謝支持1 文章概述假設服務提供者提供A服務,但是A服務並不穩定,如果服務消費者無法正常消費A服務就需要做降級處理,不再消費<beans> <dubbo:application name=&34; /> <dubbo:registry address=&34; /> <dubbo:reference id=&34; cluster=&34; interface=&34; /></beans>
  • 又踩到Dubbo的坑,但是這次我笑不出來
    於是只能順著源碼,把Dubbo的整個請求到響應的過程在腦海中快速過幾遍,看看哪個環節有可能出問題,做了無數的假設。隨著一次次的假設失敗,在即將身體索然無味之際,還真發現了一些蛛絲馬跡!(注意,本文所用到的,都是dubbo2.7.6)我們先來看一下官方文檔對RpcContext的介紹
  • 「DUBBO系列」集群容錯策略Failfast源碼分析
    請點擊【關注】獲取更多網際網路和技術乾貨,頭條號IT徐胖子原創本文請勿轉載,感謝支持1 文章概述假設服務提供者提供A服務,但是A服務並不穩定,如果服務消費者無法正常消費A服務就需要做降級處理,不再消費<beans> <dubbo:application name=&34; /> <dubbo:registry address=&34; /> <dubbo:reference id=&34; cluster=&34; interface=&34; /></beans>
  • 「DUBBO系列」服務超時機制源碼分析
    請點擊【關注】獲取更多網際網路和技術乾貨,頭條號IT徐胖子原創本文請勿轉載,感謝支持1 文章概述DUBBO有很多地方可以配置超時時間,可以配置在消費者,可以配置在生產者,可以配置為方法級別,可以配置為接口級別