新聞中心
Dubbo是一個高性能的開源RPC框架,它的出現(xiàn)極大地簡化了服務(wù)之間的調(diào)用。而在使用Dubbo時,我們有時會遇到啟動報錯的問題,這篇文章將為大家介紹在Linux下啟動Dubbo時遇到的一些常見的報錯及解決方案。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供科爾沁左翼網(wǎng)站建設(shè)、科爾沁左翼做網(wǎng)站、科爾沁左翼網(wǎng)站設(shè)計、科爾沁左翼網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、科爾沁左翼企業(yè)網(wǎng)站模板建站服務(wù),10多年科爾沁左翼做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
1. java.lang.IllegalArgumentException: Property ‘zookeeper’ is required
這個錯誤意味著Dubbo找不到zookeeper的配置文件,解決方法是在dubbo.properties配置文件中添加zookeeper的地址,例如:
dubbo.registry.address=zookeeper://127.0.0.1:2181
2. Could not find or load mn class
這個錯誤通常是因?yàn)镃LASSPATH變量未被正確設(shè)置,解決方法是在啟動時手動設(shè)置CLASSPATH,例如:
java -Djava.ext.dirs=./lib com.alibaba.dubbo.contner.Mn
其中-Djava.ext.dirs=./lib表示設(shè)置類路徑為當(dāng)前目錄下的lib子目錄。
3. java.net.BindException: Address already in use: bind
這個錯誤意味著Dubbo中指定的端口已被占用,解決方法是更換端口號或者找到占用端口的進(jìn)程并結(jié)束該進(jìn)程。
4. No provider avlable for the service
這個錯誤意味著Dubbo找不到可用的服務(wù)提供者,解決方法是確保服務(wù)提供者已經(jīng)正確部署,并且消費(fèi)者的配置文件中指定了正確的服務(wù)提供者地址。
5. java.lang.NoClassDefFoundError: org/freemarker/template/TemplateException
這個錯誤通常是由缺少必要的jar包導(dǎo)致的,解決方法是在CLASSPATH中添加缺失的jar包。
6. Fled to connect to server
這個錯誤意味著Dubbo無法連接到zookeeper服務(wù)器,解決方法是檢查zookeeper的地址是否正確,并確保zookeeper服務(wù)器已經(jīng)正確部署。
7. java.lang.IllegalStateException: Fled to check the status of the service
這個錯誤通常是由服務(wù)提供者未正常啟動或已經(jīng)關(guān)閉導(dǎo)致的,解決方法是確保服務(wù)提供者已經(jīng)正確啟動并運(yùn)行。
:
在使用Dubbo框架時,我們可能會遇到各種不同的啟動報錯,這時候我們需要具備一定的調(diào)試能力,有效地排除問題,并采取相應(yīng)的解決方案。在Linux下啟動Dubbo時,我們需要注意設(shè)置環(huán)境變量和CLASSPATH等路徑相關(guān)的變量,并且需要檢查zookeeper的地址是否正確,服務(wù)提供者是否已經(jīng)正確部署。當(dāng)然,最重要的是我們需要不斷地學(xué)習(xí)和實(shí)踐,掌握更多的技能和經(jīng)驗(yàn),提升自己的開發(fā)水平。
相關(guān)問題拓展閱讀:
- Dubbo——服務(wù)調(diào)用、服務(wù)暴露、服務(wù)引用過程
Dubbo——服務(wù)調(diào)用、服務(wù)暴露、服務(wù)引用過程
1、InvokerInvocationHandler jdk動態(tài)代理
5、RegistryDirector返回Invokers
Router分為:Script 腳本路由、Condition 條件路由
6、通過MockInvokersSelector的route方法(getNormalInvokers)拿到能正常執(zhí)行的invokers
8、當(dāng)回到AbstractClusterInvoker后,執(zhí)行首納(默認(rèn)FailoverClusterInvoker,根據(jù)配置的是,F(xiàn)ailfast Cluster(快速失敗) , Failsafe Cluster(失敗安全) , Failback Cluster(失敗自動恢復(fù)) , Forking Cluster(并行調(diào)用多個服務(wù)器,只要一個成功即返回) , Broadcast Cluster(廣播調(diào)用所有提供者,逐個調(diào)用,任意一臺報錯則報錯))doInvoker方法
9、FailoverClusterInvoker調(diào)用AbstractClusterInvoker的select方法
10、執(zhí)行doSelect方法
11、調(diào)用AbstractLoadbalance的select方法
12、根據(jù)配置的負(fù)載均衡策略調(diào)用對應(yīng)的(如RoundRobinLoadBalance)類的doSelect方法
13、返回invokers.get()方法
14、調(diào)用FailoverClusterInvoker的invoke方法
均繼承自抽象類AbstractDirectory
Directory 獲取 invoker 是從 methodInvokerMap 中獲取的,主要都是讀操作,那它的寫操作是在什么時候?qū)懙哪?就是在回調(diào)方法 notify 的時候操作的,也就是注冊中心有變化,則更新 methodInvokerMap 和 urlInvokerMap 的值
根據(jù)dubbo-admin配置的路由規(guī)則來過濾相關(guān)的invoker,當(dāng)我們對路由規(guī)則點(diǎn)擊啟用,就會觸發(fā) RegistryDirectory 類的 notify 方法。
notify方法調(diào)用refreshInvoker方法。
route方法的實(shí)現(xiàn)類為ConditionRoute 根據(jù)條件進(jìn)行過濾
1、調(diào)用mathThen方法
2、調(diào)用matchCondition方法
3、調(diào)用isMatch判斷
4、調(diào)用isMatchGlobPattern方法
?
集群模塊是服務(wù)提供者和服務(wù)消費(fèi)者的中間層,為服務(wù)消費(fèi)者屏蔽了服務(wù)提供者的情況,這樣服務(wù)消費(fèi)者就可以專心處理遠(yuǎn)程調(diào)用相關(guān)事宜。比如發(fā)請求,接受服務(wù)提供者返回的數(shù)據(jù)等。這就是Dubbo Cluster集群的作用。
通過cluster來指定集群容錯方式
其實(shí)就是應(yīng)對出錯情況采取的策略
用于芹磨有狀態(tài)服務(wù),盡可能讓客戶端總是向同一提供者發(fā)起調(diào)用,除非提供者掛了,再連另一臺,自動開啟延遲鏈接,以減少長接數(shù)
?啟動時服務(wù)提供者將當(dāng)前進(jìn)程啟動時間注冊到ZK;服務(wù)消費(fèi)者發(fā)現(xiàn)該節(jié)點(diǎn)后計算服務(wù)啟動時間(相對當(dāng)前時間),在默認(rèn)預(yù)熱時間的前20%時間內(nèi),該節(jié)點(diǎn)權(quán)重始終固定為2,這樣客戶端的負(fù)載均衡器只會分發(fā)極少的請求至節(jié)點(diǎn)。
?在預(yù)熱時間之后的80%時間內(nèi),該節(jié)點(diǎn)權(quán)重將隨著時間的推移而線性增長;待預(yù)熱時間到期后,權(quán)重自動恢復(fù)為默認(rèn)值100;負(fù)載均衡器的內(nèi)核是一個標(biāo)準(zhǔn)的WLC算法模塊,即加權(quán)最少連接算法;
?如果某個節(jié)點(diǎn)Hang住或宕機(jī),其權(quán)重會迅速自動調(diào)節(jié)降低,避免持續(xù)性影響;當(dāng)節(jié)點(diǎn)下線時,服務(wù)端提前觸發(fā)權(quán)重調(diào)節(jié),重載默認(rèn)權(quán)重至1并發(fā)布到注冊中心,服務(wù)消費(fèi)者將迅速感知到該事件;
服務(wù)提供者優(yōu)雅下線步驟(注意這套邏輯僅在服務(wù)端執(zhí)行)在ok.htm?down=true對應(yīng)的controller中加入下列邏輯,注意嫌芹斗要判斷down是否為true,因?yàn)檎碚ffalse表示啟動驗(yàn)證而不是關(guān)機(jī)
服務(wù)者消費(fèi)者配置
dubbo服務(wù)支持參數(shù)動態(tài)調(diào)整,例如動態(tài)調(diào)整權(quán)重,但dubbo實(shí)現(xiàn)方式較為特殊,并不是常規(guī)思路。
?ServiceConfig類拿到對外提供服務(wù)的實(shí)際類ref,然后通過ProxyFactory類的getInvoker方法使用ref生成一個AbstractProxyInvoker實(shí)例,到這一步就完成具體服務(wù)到Invoker的轉(zhuǎn)換(javassistProxyFacory、JdkProxyFactory),接著要做Invoker轉(zhuǎn)換到Export的過程
?服務(wù)發(fā)布:本地暴露、遠(yuǎn)程暴露
?為什么會有 本地暴露 和 遠(yuǎn)程暴露 呢?不從場景考慮討論技術(shù)的沒有意義是.在dubbo中我們一個服務(wù)可能既是 Provider ,又是 Consumer ,因此就存在他自己調(diào)用自己服務(wù)的情況,如果再通過網(wǎng)絡(luò)去訪問,那自然是舍近求遠(yuǎn),因此他是有 本地暴露 服務(wù)的這個設(shè)計.從這里我們就知道這個兩者的區(qū)別
1、spring啟動,解析配置文件
2、創(chuàng)建dubbo標(biāo)簽解析器
3、解析dubbo標(biāo)簽
4、ServiceBean解析
5、容器創(chuàng)建完成,觸發(fā)ContextRefrestEvent
6、export暴露服務(wù)
7、duExportUrls
8、doExportUrlsFor1Protocol
9、getInvoker
10、protocol.export
11、開啟服務(wù)器 openServer()如nettyServer
12、注冊服務(wù)到注冊中心 registerProvider
Filter 在服務(wù)暴露前,做攔截器初始化,在加載所有攔截器時會過濾支隊provider生效的數(shù)據(jù)。
可以。zookeeper的信息會緩存到本地作為一個緩存文件,并且轉(zhuǎn)換成 properties 對象方便使用。建立線程池,定時檢測并連接注冊中心,失敗了就重連。
注冊服務(wù)到zk其實(shí)就是在zk上創(chuàng)建臨時節(jié)點(diǎn),當(dāng)節(jié)點(diǎn)下線或者down掉時,即會刪除臨時節(jié)點(diǎn),從而使服務(wù)從可用列表中剔除。
持久節(jié)點(diǎn)
臨時節(jié)點(diǎn)
1、export的時候進(jìn)行zk訂閱
2、設(shè)置監(jiān)聽回調(diào)的地址,回調(diào)給FailbackRegistry的notify
3、創(chuàng)建持久節(jié)點(diǎn)
4、設(shè)置對該節(jié)點(diǎn)的監(jiān)聽
5、更新新的服務(wù)信息,服務(wù)啟動和節(jié)點(diǎn)更新回調(diào),都會調(diào)用到這里
6、更新緩存文件
7、對比新舊信息是否有變化,有則重新暴露服務(wù)
高并發(fā)大業(yè)務(wù)量情況下,暫時屏蔽邊緣業(yè)務(wù)
MockClusterInvoker
?SPI 全稱為 Service Provider Interface,是一種服務(wù)發(fā)現(xiàn)機(jī)制。SPI 的本質(zhì)是將接口實(shí)現(xiàn)類的全限定名配置在文件中,并由服務(wù)加載器讀取配置文件,加載實(shí)現(xiàn)類。這樣可以在運(yùn)行時,動態(tài)為接口替換實(shí)現(xiàn)類。正因此特性,我們可以很容易的通過 SPI 機(jī)制為我們的程序提供拓展功能。SPI 機(jī)制在第三方框架中也有所應(yīng)用,比如 Dubbo 就是通過 SPI 機(jī)制加載所有的組件。不過,Dubbo 并未使用 Java 原生的 SPI 機(jī)制,而是對其進(jìn)行了增強(qiáng),使其能夠更好的滿足需求。在 Dubbo 中,SPI 是一個非常重要的模塊?;?SPI,我們可以很容易的對 Dubbo 進(jìn)行拓展。如果大家想要學(xué)習(xí) Dubbo 的源碼,SPI 機(jī)制務(wù)必弄懂。接下來,我們先來了解一下 Java SPI 與 Dubbo SPI 的用法,然后再來分析 Dubbo SPI 的源碼。
關(guān)于linux dubbo啟動報錯的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專注四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,可選線路電信、移動、聯(lián)通等。
當(dāng)前文章:Linux下啟動Dubbo報錯解決方案(linuxdubbo啟動報錯)
轉(zhuǎn)載源于:http://m.5511xx.com/article/cdpedph.html


咨詢
建站咨詢
