原文鏈接:https://www.cnblogs.com/linjiqin/p/5859153.html
一膊存、dubbo常用配置
[](javascript:void(0); "復制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"><dubbo:service/> 服務配置,用于暴露一個服務挤巡,定義服務的元信息,一個服務可以用多個協(xié)議暴露嘶炭,一個服務也可以注冊到多個注冊中心袄简。
eg、<dubbo:service ref="demoService" interface="com.unj.dubbotest.provider.DemoService" />
<dubbo:reference/> 引用服務配置比藻,用于創(chuàng)建一個遠程服務代理,一個引用可以指向多個注冊中心倘屹。
eg银亲、<dubbo:reference id="demoService" interface="com.unj.dubbotest.provider.DemoService" />
<dubbo:protocol/> 協(xié)議配置,用于配置提供服務的協(xié)議信息纽匙,協(xié)議由提供方指定务蝠,消費方被動接受。
eg烛缔、<dubbo:protocol name="dubbo" port="20880" />
<dubbo:application/> 應用配置请梢,用于配置當前應用信息赠尾,不管該應用是提供者還是消費者。
eg毅弧、<dubbo:application name="xixi_provider" />
<dubbo:application name="hehe_consumer" />
<dubbo:module/> 模塊配置气嫁,用于配置當前模塊信息,可選够坐。 <dubbo:registry/> 注冊中心配置寸宵,用于配置連接注冊中心相關信息。
eg元咙、<dubbo:registry address="zookeeper://192.168.2.249:2181" />
<dubbo:monitor/> 監(jiān)控中心配置梯影,用于配置連接監(jiān)控中心相關信息,可選庶香。 <dubbo:provider/> 提供方的缺省值甲棍,當ProtocolConfig和ServiceConfig某屬性沒有配置時,采用此缺省值赶掖,可選感猛。 <dubbo:consumer/> 消費方缺省配置,當ReferenceConfig某屬性沒有配置時奢赂,采用此缺省值陪白,可選。 <dubbo:method/> 方法配置膳灶,用于ServiceConfig和ReferenceConfig指定方法級的配置信息咱士。 <dubbo:argument/> 用于指定方法參數(shù)配置。</pre>
[](javascript:void(0); "復制代碼")
二轧钓、服務調(diào)用超時設置
上圖中以timeout為例序厉,顯示了配置的查找順序,其它retries, loadbalance, actives也類似毕箍。
方法級優(yōu)先弛房,接口級次之,全局配置再次之霉晕。
如果級別一樣,則消費方優(yōu)先捞奕,提供方次之牺堰。
其中,服務提供方配置颅围,通過URL經(jīng)由注冊中心傳遞給消費方伟葫。
建議由服務提供方設置超時,因為一個方法需要執(zhí)行多長時間院促,服務提供方更清楚筏养,如果一個消費方同時引用多個服務斧抱,就不需要關心每個服務的超時設置。
理論上ReferenceConfig的非服務標識配置渐溶,在ConsumerConfig辉浦,ServiceConfig, ProviderConfig均可以缺省配置。
**三茎辐、啟動時檢查 **
Dubbo缺省會在啟動時檢查依賴的服務是否可用宪郊,不可用時會拋出異常,阻止Spring初始化完成拖陆,以便上線時弛槐,能及早發(fā)現(xiàn)問題,默認check=true依啰。
如果你的Spring容器是懶加載的乎串,或者通過API編程延遲引用服務,請關閉check速警,否則服務臨時不可用時叹誉,會拋出異常,拿到null引用坏瞄,如果check=false桂对,總是會返回引用,當服務恢復時鸠匀,能自動連上蕉斜。
可以通過check="false"關閉檢查,比如缀棍,測試時宅此,有些服務不關心,或者出現(xiàn)了循環(huán)依賴爬范,必須有一方先啟動父腕。
[](javascript:void(0); "復制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">1、關閉某個服務的啟動時檢查:(沒有提供者時報錯) <dubbo:reference interface="com.foo.BarService" check="false" /> 2青瀑、關閉所有服務的啟動時檢查:(沒有提供者時報錯) 寫在定義服務消費者一方 <dubbo:consumer check="false" /> 3璧亮、關閉注冊中心啟動時檢查:(注冊訂閱失敗時報錯) <dubbo:registry check="false" /></pre>
[](javascript:void(0); "復制代碼")
引用缺省是延遲初始化的,只有引用被注入到其它Bean斥难,或被getBean()獲取枝嘶,才會初始化。
如果需要饑餓加載哑诊,即沒有人引用也立即生成動態(tài)代理,可以配置:
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"><dubbo:reference interface="com.foo.BarService" init="true" /></pre>
四竞阐、訂閱
1、問題
為方便開發(fā)測試骆莹,經(jīng)常會在線下共用一個所有服務可用的注冊中心颗搂,這時,如果一個正在開發(fā)中的服務提供者注冊汪疮,可能會影響消費者不能正常運行。
2智嚷、解決方案
可以讓服務提供者開發(fā)方,只訂閱服務(開發(fā)的服務可能依賴其它服務)盏道,而不注冊正在開發(fā)的服務稍浆,通過直連測試正在開發(fā)的服務。
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">禁用注冊配置: <dubbo:registry address="10.20.153.10:9090" register="false" /> 或者: <dubbo:registry address="10.20.153.10:9090?register=false" /></pre>
五猜嘱、回聲測試(測試服務是否可用)
回聲測試用于檢測服務是否可用,回聲測試按照正常請求流程執(zhí)行弦撩,能夠測試整個調(diào)用是否通暢论皆,可用于監(jiān)控。
所有服務自動實現(xiàn)EchoService接口点晴,只需將任意服務引用強制轉型為EchoService,即可使用陪竿。
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">eg屠橄、<dubbo:reference id="memberService" interface="com.xxx.MemberService" /> MemberService memberService = ctx.getBean("memberService"); // 遠程服務引用
EchoService echoService = (EchoService) memberService; // 強制轉型為EchoService
String status = echoService.$echo("OK"); // 回聲測試可用性
assert(status.equals("OK"))</pre>
六、延遲連接
延遲連接礁哄,用于減少長連接數(shù)贮匕,當有調(diào)用發(fā)起時花枫,再創(chuàng)建長連接掏膏。
只對使用長連接的dubbo協(xié)議生效敦锌。
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"><dubbo:protocol name="dubbo" lazy="true" /></pre>
**七、令牌驗證 **
防止消費者繞過注冊中心訪問提供者颖变,在注冊中心控制權限听想,以決定要不要下發(fā)令牌給消費者,注冊中心可靈活改變授權方式汉买,而不需修改或升級提供者
](javascript:void(0); "復制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">1蛙粘、全局設置開啟令牌驗證:
<dubbo:provider interface="com.foo.BarService" token="true" />
<dubbo:provider interface="com.foo.BarService" token="123456" /> 2、服務級別設置開啟令牌驗證:
<dubbo:service interface="com.foo.BarService" token="true" />
<dubbo:service interface="com.foo.BarService" token="123456" /> 3出牧、協(xié)議級別設置開啟令牌驗證:
<dubbo:protocol name="dubbo" token="true" />
<dubbo:protocol name="dubbo" token="123456" /></pre>
](javascript:void(0); "復制代碼")
八舔痕、日志適配
缺省自動查找:log4j、slf4j盈咳、jcl边翼、jdk
可以通過以下方式配置日志輸出策略:dubbo:application logger="log4j"/>
訪問日志:
如果你想記錄每一次請求信息,可開啟訪問日志组底,類似于apache的訪問日志。此日志量比較大江滨,請注意磁盤容量厌均。
將訪問日志輸出到當前應用的log4j日志:
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"><dubbo:protocol accesslog="true" /></pre>
將訪問日志輸出到指定文件:
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"><dubbo:protocol accesslog="http://10.20.160.198/wiki/display/dubbo/foo/bar.log" /></pre>
九、配置Dubbo緩存文件
配置方法如下:
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"><dubbo:registryfile=”${user.home}/output/dubbo.cache” /></pre>
注意:
文件的路徑晶密,應用可以根據(jù)需要調(diào)整,保證這個文件不會在發(fā)布過程中被清除懂牧。如果有多個應用進程注意不要使用同一個文件尊勿,避免內(nèi)容被覆蓋。
這個文件會緩存:
注冊中心的列表
服務提供者列表
有了這項配置后元扔,當應用重啟過程中,Dubbo注冊中心不可用時則應用會從這個緩存文件讀取服務提供者列表的信息吻氧,進一步保證應用可靠性咏连。