導航:首頁 > 文件管理 > dubbo配置文件讀取屬性取不到

dubbo配置文件讀取屬性取不到

發布時間:2023-03-30 00:17:36

A. 調用bbo服務時事務配置在哪

bbo實現了分布式遠程調用框架,多運行節點既能提高可靠性,又能提升負載能力。bbo配置主要有注冊中心(推薦zookeeper或redis)、提供者provider、消費者consumer,注冊中心是第三方實現,所以主要配置好服務提供者和消費者就可以了。實際上服務介面和實現都是需要我們自己設計和實現的,bbo做的事情就是將服務實現發布到注冊中心,然後消費者從注冊中心訂閱服務介面,之後對介面的調用就由bbo調度提供者去執行並返回結果。以下配置都有源碼,見右側「免費資源」。

提供者provider的配置:提供者是獨立運行的節點,可以多實例運行,將服務注冊到注冊中心
必須要有application name,注冊中心配置zookeeper,協議bbo,超時6秒失敗不重試,提供者載入repository和service層bean,然後發布介面service。
<bbo:application name="ite-provider" />
<bbo:registry address="zookeeper://127.0.0.1:2181"/>
<bbo:protocol name="bbo" port="20880" />
<bbo:provider timeout="6000" retries="0"/>

<import resource="classpath:cache.xml"/>
<import resource="classpath:ite-repository.xml"/>
<import resource="classpath:ite-service.xml"/>
<import resource="classpath:ite-provider.xml"/>
ite-provider.xml,ref引用的bean是ite-service.xml已經定義好的介面實現,bbo:service就是把介面實現發布到注冊中心
<bbo:service ref="codeListService" interface="com.itecheast.ite.domain.service.CodeListService" />
<bbo:service ref="idService" interface="com.itecheast.ite.domain.service.IdService" />
<bbo:service ref="passwordService" interface="com.itecheast.ite.domain.service.PasswordService" />
<bbo:service ref="rolePermissionService" interface="com.itecheast.ite.domain.service.RolePermissionService" />
provider是可以獨立運行的,bbo.jar裡面有assembly目錄,運行mvn assembly:directory就可以生成能直接運行的provider目錄

assembly.xml內容,可以切換dir或tar.gz兩種格式
<assembly>
<id>assembly</id>
<formats>
<!-- <format>tar.gz</format> -->
<format>dir</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>src/main/assembly/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>src/main/assembly/conf</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0644</fileMode>
</fileSet>
<fileSet>
<directory>src/test/resources</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0644</fileMode>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
bbo.properties,運行start.bat或start.sh時,將從屬性文件讀取bbo配置信息,provider節點可以多處復制並運行。
bbo.container=log4j,spring
bbo.application.name=ite-provider
bbo.registry.address=zookeeper://127.0.0.1:2181
bbo.monitor.protocol=registry
bbo.protocol.name=bbo
bbo.protocol.port=20880
bbo.spring.config=provider.xml
bbo.log4j.file=logs/ite-provider.log
bbo.log4j.level=WARN
消費者consumer的配置,使用bbo:reference訂閱注冊中心裡的服務即可,然後就可以@Autowired注入服務介面了。
<bbo:application name="ite-consumer" />
<bbo:registry address="zookeeper://127.0.0.1:2181"/>

<bbo:reference id="codeListService" interface="com.itecheast.ite.domain.service.CodeListService" />
<bbo:reference id="idService" interface="com.itecheast.ite.domain.service.IdService" />
<bbo:reference id="passwordService" interface="com.itecheast.ite.domain.service.PasswordService" />
<bbo:reference id="rolePermissionService" interface="com.itecheast.ite.domain.service.RolePermissionService" />
如果前端項目是一個消費者,就可以在web.xml里直接載入consumer.xml訂閱服務了。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:consumer.xml,classpath:cache.xml,classpath:shiro.xml,classpath:front.xml</param-value>
</context-param>

實際上本地調試開發時,可以不必啟用分布式配置,只需要更改web.xml即可,所有的服務都已經是配置好了的。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ite-repository.xml,classpath:ite-service.xml,classpath:cache.xml,classpath:shiro.xml,classpath:front.xml</param-value>
</context-param>
zookeeper的配置很簡單,
wget http://tool.xlongwei.com/softwares/zookeeper-3.4.6.tar.gz
tar -zxvf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg #配置zookeeper參數
單機配置(集群配置待研究)

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/bbo/zookeeper-3.3.3/data
clientPort=2181
運行或停止zookeeper
sh zkServer.sh start | stop

B. bbo中No such application config!異常

運行springBoot項目啟動報錯:java.lang.IllegalStateException: No such application config! Please add <bbo:application name="..." /> to your spring config。

原因洞或在於配置文件問題,

否則在啟動時,激銷埠號一直是20880,會報錯納鉛伍無法連接到bbo!

C. bbo服務消費方注入@Reference失敗

Injection of @org.apache.bbo.config.annotation.Reference dependencies is failed;

No provider available for the service XXXService

出現這個錯誤的原因有很多,本篇記錄自己遇到的坑,其他原因可自行網路,一大堆兒。。。

進入zookeeper客戶端查看提供者介面信息

發現服務提供者注冊尺鋒的ip地址與本機配置的ip不一致,使用了本陵型晌機的虛擬網卡的ip。

通過 ping 命令 192.168.0.102 發現目標ip不可達。

1.查看本機的ip地址  ifconfig命令

2.修改bbo的配置,將協議的host修改為本機正常可達的ip 如:bbo.protocol.host=192.168.0.100.

到此如果你的ip是正常可達的基本服務消費方就能租團正常啟動了,並且可調用介面中的方法。

D. 如何通過bbo介面調用別人的服務,找不到服務

直連加不發布服務
DUBBO的配置屬性裡面對消費端提供了不從注冊中心發現服務的機制,直接配置遠程介面的地址,這樣可以保證消費端連接到制定的環境介面。這樣消費端是解決了問題,但是服務提供端呢?如上圖的B1它即是消費端也是服務提供端,它提供A1所依賴的介面,那麼如果B1將它的服務發布到注冊中心裏面(這里需要提醒,STABLE環境機制裡面檔喊所有子環境公用一個注冊中心),那麼勢必會導致stable環境裡面的A會發現B1提供的服務?勢必會導致stable環境的不穩定(stable環境雀凳的機制是stable環境只能進不能出,就是不能調用外部其他子環境的服務)?所以B1不能發布服務到注冊中心,bbo也提供了相關的配置屬性來支持這一點。下面我例舉出通過哪些配置可以實現這種方案:
服務消費端:
DUBBO在消費端提供了一個url的屬性來指定某個服務端的地址
<頃蠢旅!--lang:xml-->
<bbo:reference interface="com.alibaba.bbo.demo.HelloWorldService" check="false" id="helloWorldService"/>

默認的方式是從注冊中心發現介面為com.alibaba.bbo.demo.HelloWorldService的服務,但是如果需要直連,可以在bbo.properties下面配置bbo.reference.helloWorldService.url=bbo://ip:port/com.alibaba.bbo.demo.HelloWorldService可以通過配置bbo.reference.url=bbo://ip:port/來讓某個消費者系統的服務都指向制定的伺服器地址(關於配置信息可以參考《DUBBO配置規則詳解》)

E. RpcException: Invalid token! Failed to invoke method

問題:直連bbo應用時,提示錯誤:RpcException: Invalid token! Failed to invoke method

原因:這是因辯唯寬為provide 配置了token驗證,調試時可以暫時去掉這個配置。 關於bbo token 配置的說明如下:

bbo:service tokentokenstring/boolean可選false服務治理令牌驗證,為空表示不開啟,如果為true,表示隨機生成動態令牌,否則使用靜態令牌,令牌的作用是防止消費者繞過注冊中心直接訪問,保證注冊中心的授權功能有效,如山枝果使用點對點調用,需關閉令牌功能攜亮

解決:關閉token驗證後就可以正常調用了。

F. bbo java環境下出現Cannot resolve reference to bean 'carDao' setting bean property 'carDao'錯誤

往service里注入失敗了。
改成:ref="CarServiceImpl"

G. 關於升級 Dubbo 版本到 2.6.5 後啟動失敗的「坑」

Dubbo 從低版本升級到 2.6.5 版本後,啟動失敗,報錯如下:

<b><font color='red'>上終極方案:使用 2.6.2 以下版本或者 2.7.0 以上版本的 bbo ;</font></b>

具體解決方式需要根據項目的情況解決,提供一些其他方案:

刪除 web.xml 中如下的配置:

Spring Boot 工程沒有特別好的解決方案,提供兩個解決思路:

這個方案也沒有繞過添加 web.xml 的命運,做法如下:

觀察報錯日誌,報錯位置很明顯是 Spring 框架初始化時的報錯,重點是: there is already a root application 。

這個錯誤拋出位置余汪返位於: Spring-web 包的 ContextLoader 類的 initWebApplicationContext 方法。

原因很明顯, ContextLoader 被調用了至少兩遍,第二遍報錯導致項目初始化失敗,其主要的「罪魁禍首」是 bbo 包下面的 web-fragment.xml 。

Servlet 3.0 是隨著 Java EE 6 規范發布的,主要新增特性:

支持 Servlet 3.0 規范的容器,在啟動後會掃描工程的 jar 包,找到符合規范的 添加了相關註解的類 和 web-fragment.xml 然後跟 web.xml 的配置合並作為整個項目的初始化配置。

上述問題的發生原因很明顯了:

這個是 Servlet 3.0 提供的一個屬性,等同一個開關,設置為 true 則表示 web.xml 已經提供了全部的配置信息,不需要容器再去各個 jar 包找配置了陵罩,換句話就是:關閉 可插特性 ;

這個屬性是 注釋裡面提供的解決思路。這個屬性可以理解為指定 web-fragment.xml 的載入順序,和 ordering 標簽的區別是, absolute-ordering 僅僅針對我們指定的 web-fragment.xml 做排序。

輕易升級一個基礎框架不是一個好的做法豎飢,<b>升級基礎框架還是應該關注下當前版本和目標升級版本,框架作者做了些什麼事情,出現過什麼BUG。</b>

當前的 Spring Boot 的解決方案並不讓人滿意,畢竟 Spring Boot 的無Xml的感覺還是很爽的,為了這個升級引入了 web.xml 會有一點點不爽。

H. eclipse導入maven管理的項目時,pom.xml第一行報錯。錯誤如圖1。而且bbo的xml也不識別。

bbo的問題是因為他的官網關了對應的xsd無法獲取到

對於 eclipse 來說這個文件只能改為從本地讀取才能正常

修改方法是提取bbo.jarMETA-INF中的bbo.xsd文件到隨意一個目錄,建議放Eclipse目錄下就好

打開Eclipse的Window-preferences選擇XMLCatalog

右邊userspecifiedentries下add兩條記錄

Location選擇你的bbo.xsd文件


keytype選Namespacename

key填入http://code.alibabatech.com/schema/bbo


然後再add一條

Location選擇你的bbo.xsd文件


keytype選schemalocation


key填入http://code.alibabatech.com/schema/bbo/bbo.xsd

(這部分記得要復制,一般人為了省事直接在後面加上xsd,其實少了/bbo/ 這個目錄)


ok保存以後刷新你的項目過一會兒bbo相關的錯誤就沒了


補充刷新方法:eclipse工具欄的 project - clean... 選擇所有或者單獨你用到的工程

ok之後等項目重新build


截圖有點問題~ 截了兩次 不過這個不是重點 無所謂了

MyEclipse可能位置不同,我沒有這個ide 自行搜索對應的位置吧 XML Catalog


bbo的問題如果解決了,我要求的不多 點個「給力」就好~ 謝了

閱讀全文

與dubbo配置文件讀取屬性取不到相關的資料

熱點內容
ls可編程式控制制器如何使用 瀏覽:388
擴展名為的文件是視頻文件 瀏覽:761
如何安裝my配置文件 瀏覽:324
卡死安卓機代碼 瀏覽:127
mt4畫的線屬於什麼文件 瀏覽:568
輸入文件格式 瀏覽:103
織夢網站一排4張圖片 瀏覽:301
樂1s可以升級到全網通嗎 瀏覽:484
QQ瀏覽器保留密碼mac 瀏覽:761
一台電腦如何共享文件夾 瀏覽:942
wps如何保存pdf文件 瀏覽:602
PS源文件是厘米 瀏覽:766
創建桌面文件夾路徑 瀏覽:900
華為手機app應用數據哪些刪除 瀏覽:765
資料庫有哪些表格 瀏覽:741
bada12微信java 瀏覽:16
小白編程什麼最好學 瀏覽:205
qq回頭看頭像 瀏覽:338
蘋果換屏要多長時間 瀏覽:283
如何用平板電腦學編程 瀏覽:424

友情鏈接