本文目錄一覽:
為什麼dubbo的java project需要兩個
一個是生產者,一個是消費者。生產者就是提高dubbo服務的工程。消費者就是一個web項目,然後這個項目中對業務數據的增刪改查都是去調用的生產者工程上的dubbo服務。這樣可以有多個web項目去調用生產者上面的dubbo服務。從而實現了對業務處理代碼的集中管理和重複利用。
JAVA分布開發dubbo問題
首先要搞清楚三者的概念
1、Dubbo是阿里開源的默認基於TCP協議RPC遠程服務調度框架,簡單理解就是服務A使用TCP協議調用服務B的Dubbo接口。
2、Zookeeper是註冊中心,在這裡主要用於管理dubbo服務提供者和消費者的註冊信息與服務調度時提供相關依據。
3、Tomcat是WEB應用服務器,可以對外暴露基於HTTP協議的服務接口。
由於用戶訪問你的應用首先是通過瀏覽器,也就是基於HTTP協議,所以必須對外暴露HTTP接口作為入口,那麼就需要使用WEB應用服務器,比如Tomcat、Jetty、Undertow等等。
關於不啟動tomcat,需要哪些配置的問題如下:
Dubbo支持HTTP協議,但原理任然是通過WEB應用服務器暴漏一個端口。從Dubbo本身專註的領域來說,不建議用HTTP協議,所以最終的結論是,服務與服務之間的接口調用使用Dubbo,而對外暴露HTTP接口任然使用WEB應用服務器。
從零開始認識Dubbo
[TOC]
1.Dubbo是什麼
Apache Dubbo 是一款高性能Java RPC框架。
Dubbo是一個分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務框架的需求,並且本質上是個服務調用的東東, 說白了就是個遠程服務調用的分布式框架(告別Web Service模式中的WSdl,以服務者與消費者的方式在dubbo上註冊) 其核心部分包含:
2.Dubbo能做什麼
Dubbo採用全spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行加載。
3.Dubbo架構
節點角色說明:
Provider: 暴露服務的服務提供方。
Consumer: 調用遠程服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的調用次調和調用時間的監控中心。
Container: 服務運行容器。
調用關係說明:
4.Dubbo的使用方法
Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行加載。如果不想使用Spring配置,可以通過API的方式進行調用(註解式,不推薦使用)
下載安裝zookeeper註冊中心(不建議使用multicast)
1.Windows
下載地址:
使用方法:下載解壓即可,進入解壓目錄運行zkServer.cmd啟動註冊服務中心
截圖:
2.MacOS
下載地址:
使用方法:下載解壓即可,進入解壓目錄運行zkServer.sh start啟動註冊服務中心
3.Linux
下載地址:
使用方法:下載解壓即可,進入解壓目錄運行zkServer.sh start啟動註冊服務中心
服務提供者
1.定義服務接口(該接口需單獨打包,在服務提供方和消費方共享)
DemoService.java
2.服務提供方實現接口:(對服務消費方隱藏實現)
DemoServiceImpl.java
dubbo-provider.xml:
4.加載Spring配置,啟動服務:
Provider.java:
或者使用springBoot啟動
服務消費者:
applicationContext-dubbo.xml 中註冊自己需要調用的接口。
1.通過Spring配置引用遠程服務
dubbo-consumer.xml:
2.加載Spring配置,並調用遠程服務:
Consumer.java
或者使用springBoot啟動
並添加對應的restful接口提供接口訪問
修改對應index頁面
3.dubbo管理頁面:
啟動後訪問
輸入賬號密碼root/root
應用頁面:
提供者頁面:
消費者頁面:
服務頁面:
測試是否成功,只要看狀態是否正常,就ok了 ….
provider-log:
5.使用Dubbo可能遇到的問題
1、org.springframework.beans.factory.BeanCreationException
原因分析:
解決方案
2、org.apache.dubbo.rpc.RpcException
原因分析
解決方案
可能是因為providers沒有啟動,或者是provider對應暴露的服務被禁用,啟動providers或者解除禁用即可
3、java.lang.IllegalStateException
原因分析
解決方案
總結以上兩點,通俗點講,就是重啟了工程(可能是因為直接修改代碼,工程reload了), 並且,連過了數據庫(登錄等),才出現了上述報錯信息。原因是因為在tomcat重啟的時候,之前的tomcat的線程還沒有完全關閉,最新啟動tomcat就會報這個異常。
4、org.apache.dubbo.remoting.TimeoutException
原因分析
解決方案
在dubbo-provider.xml增加超時時間
dubbo java環境下出現這種錯誤怎麼解決?
往service里注入失敗了。
改成:ref=”CarServiceImpl”
Dubbo分布式服務框架 服務註冊不上:
(1) 檢查dubbo的jar包有沒有在classpath中,以及有沒有重複的jar包
(2) 檢查有沒有重複的dubbo.properties配置文件
(3) 檢查暴露服務的spring配置有沒有加載
(4) 檢查beanId或beanName有沒有重複
(5) 查看有沒有錯誤日誌:
cat ~/output/logs/webx.log
(6) 在服務提供者機器上測試與註冊中心的網絡是否通:
telnet 172.22.3.94 9090
(7) 檢查與註冊中心的連接是否存在:
netstat -anp | grep 172.22.3.94
(8) 如果是預發布機,檢查hosts文件有沒有正確綁定:
cat /etc/hosts
(9) 實在不行,開啟遠程調試:
– (a) 在服務器JVM參數中加入:-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=7001,server=y,suspend=y
注意線上只有7001和8080可以被線下訪問,調試端口需用這兩個之一,因註冊是啟動時行為,啟動時必需掛起suspend=y
– (b) 在dubbo源碼的DefaultRegistryService的registerService()方法中設置斷點。
– (c) 在Eclipse的Debug按鈕下拉菜單Debug Configurations中的Remote Java Applications中新增遠程調試,並設置IP和端口,以及增加dubbo的源碼,進行遠程Debug調試。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/193367.html