08dubbo1天02中文幫助user guide alibaba open sesame首頁用戶指南開發(fā)者管理員培訓(xùn)_第1頁
08dubbo1天02中文幫助user guide alibaba open sesame首頁用戶指南開發(fā)者管理員培訓(xùn)_第2頁
08dubbo1天02中文幫助user guide alibaba open sesame首頁用戶指南開發(fā)者管理員培訓(xùn)_第3頁
08dubbo1天02中文幫助user guide alibaba open sesame首頁用戶指南開發(fā)者管理員培訓(xùn)_第4頁
08dubbo1天02中文幫助user guide alibaba open sesame首頁用戶指南開發(fā)者管理員培訓(xùn)_第5頁
已閱讀5頁,還剩98頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

首頁||||用戶指南||開發(fā)者指南||管理員指南||培訓(xùn)文檔||常見問題解答||發(fā)布記錄||發(fā)展路線||社

English|

Xml配置多中心泛化API注解模型 Mavenmvndubbo:registrymvn(+)隨著互聯(lián)網(wǎng)的發(fā)展 應(yīng)用的規(guī)模不斷擴(kuò)大,常規(guī)的垂直應(yīng)用架構(gòu)已無法應(yīng)對(duì),分布式服務(wù)架構(gòu)以及流動(dòng)計(jì)算架構(gòu)勢(shì)在必行,亟需一個(gè)治理系統(tǒng)確此時(shí),用于簡化增刪改查工作量的數(shù)據(jù)框架(ORM)是關(guān)鍵。此時(shí),用于加速前端頁面開發(fā)的Web框架(MVC)是關(guān)鍵。此時(shí),用于提高機(jī)器利用率的資源調(diào)度和治理中心(SOA)當(dāng)服務(wù)越來越多時(shí),服務(wù)URL配置管理變得非常,F(xiàn)5硬件負(fù)載均衡器的單點(diǎn)壓力也越來越大。此時(shí)需要一個(gè)服務(wù)中心,動(dòng)態(tài)的和發(fā)現(xiàn)服務(wù),使服務(wù)的位置透明。并通過在消費(fèi)方獲取服務(wù)提供方地址列表,實(shí)現(xiàn)軟負(fù)載均衡和Failover,降低對(duì)F5當(dāng)進(jìn)一步發(fā)展,服務(wù)間依賴關(guān)系變得錯(cuò)蹤復(fù)雜,甚至分不清哪個(gè)應(yīng)用要在哪個(gè)應(yīng)用之前啟動(dòng),架構(gòu)師都不能完整的描述應(yīng)用的架構(gòu)關(guān)系。接著,服務(wù)的調(diào)用量越來越大,服務(wù)的容量問題就出來,這個(gè)服務(wù)需要多少機(jī)器支撐?什么時(shí)候該加機(jī)器?以上是Dubbo最基本的幾個(gè)需求,服務(wù)治理問題參見Provider:服務(wù)的服務(wù)提供方。Consumer:調(diào)用 Registry:服務(wù) 與發(fā)現(xiàn)的中心。Monitor:統(tǒng)計(jì)服務(wù)的調(diào)用次調(diào)和調(diào)用時(shí)間的中心服務(wù)提供者在啟動(dòng)時(shí), 中心自己提供的服務(wù)服務(wù)消費(fèi)者在啟動(dòng)時(shí), 中心訂閱自己所需的服務(wù)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,中心將基于長連接推送變更數(shù)據(jù)給消費(fèi)者服務(wù)消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到中心 中心交互,中心不轉(zhuǎn)發(fā)請(qǐng)求,壓力較小監(jiān) 服務(wù)提供者 中心其提供的服務(wù),并匯報(bào)調(diào)用時(shí)間到中心,此時(shí)間不包含網(wǎng)絡(luò)開 中心為對(duì)等集群,可動(dòng)態(tài)增加機(jī)器部署實(shí)例,所有客戶端將自動(dòng)發(fā)現(xiàn)新的中服務(wù)提供者無狀態(tài),可動(dòng)態(tài)增加機(jī)器部署實(shí)例,中心將推送新的服務(wù)提供者信息給消費(fèi)當(dāng)服務(wù)集群規(guī)模進(jìn)一步擴(kuò)大,帶動(dòng)ITDeployer:自動(dòng)部署服務(wù)的本地Repository:倉庫用于 Scheduler:調(diào)度中心基于 Admin:統(tǒng)一管理控制臺(tái)。<<beanid=“xxxService”class=“com.xxx.XxxServiceImpl”<beanid=“xxxAction”<propertyname=“xxxService”ref=“xxxService”在本地服務(wù)的基礎(chǔ)上,只需做簡單配置,即可完成化并在提供方增加服務(wù)配置<dubbo:service>,在消費(fèi)方增加服務(wù)配置<dubbo:reference>。 服務(wù)<dubbo:serviceinterface=“com.xxx.XxxService”ref=“xxxService”<dubbo:referenceid=“xxxService”interface=“com.xxx.XxxService” 服務(wù)<propertyname=“xxxService”ref=“xxxService”(+)如果不想使用Spring配置,而希望通過API的方式進(jìn)行調(diào)用(不推薦),請(qǐng)參見:API配置完整安裝步驟,請(qǐng)參見:示例提供者安裝(+)定義服務(wù)接口:(該接口需單獨(dú)打包,在服務(wù)提供方和消費(fèi)方共享publicinterfaceDemoService{Stringsay }在服務(wù)提供方實(shí)現(xiàn)接口:(對(duì)服務(wù)消費(fèi)方隱藏實(shí)現(xiàn)packagepackagepublicclassDemoServiceImplimplementsDemoServicepublicString o(String{return o"+}}用Spring配置服務(wù)<?<?xmlversion="1.0"<beans"‐ <dubbo:application o‐world‐app" 服務(wù)地址<!‐‐用dubbo協(xié)議在20880 露服務(wù)<dubbo:protocolname="dubbo"port="20880" 的服務(wù)接口和本地bean加載SpringimportimportpublicclassProviderpublicstaticvoidmain(String[]args)throwsExceptionClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(new }}完整安裝步驟,請(qǐng)參見:示例消費(fèi)者安裝(+)通過Spring配置服務(wù)<?<?xmlversion="1.0"<beans"‐ <dubbo:application oworld‐app" 發(fā)現(xiàn)服務(wù)地址<!‐‐生 加載Spring配置,并調(diào)用服務(wù):(也可以使用IoC注入importimportimportpublicclassConsumerpublicstaticvoidmain(String[]args)throwsExceptionClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(new DemoServicedemoService=(DemoService)context.getBean("demoService");//獲 o= o("world");//執(zhí) o}}(+)理論上Dubbo可以只依賴JDK,不依賴于任何庫運(yùn)行,只需配置使用JDK相關(guān)實(shí)現(xiàn)策略通過mvndependency:tree>dep.log命令分析,Dubbo缺省依賴以下庫[INFO]|+‐[INFO]|+‐ [INFO]|+‐ [INFO]|+‐ [INFO]|\‐ 這里所有依賴都是換照Dubbo javassist.jarspring.jar配置解析。如果用ServiceConfig和ReferenceConfig的APInetty.jar如果<dubbo:protocolserver="mina"/>或<dubbo:protocolserver="grizzly"/>,則換成mina.jar或grizzly.jar。如果<protocolname="rmi"/>,則不需要。mina:grizzly:http:4.1.2hessian_lite:3.2.1-fixedxstream:1.4.1fastjson:zookeeper:jedis:xmemcached:jchart:hessian:jetty:hbernate-validator:4.2.0.Finalzk:0.1curator:cxf:thrift:servlet:bsf:validation-api:1.0.0.GAjcache:0.4(+)參數(shù)驗(yàn)證,JSR303泛化實(shí)現(xiàn),無需業(yè)務(wù)接口類實(shí)現(xiàn)任意接口,用于Mock通知,在調(diào)用執(zhí)行前后觸需中心支需中心支需中心支需中心支JTA/XAdubbo-2.3.3以上版本(推薦使用心中去中心化,不需要安裝中Dogfooding,中心本身也是一個(gè)標(biāo)準(zhǔn)的RPC服支持JChart統(tǒng)計(jì)報(bào)AlRmi可與原生RMI互操作,基于TCP偶爾會(huì)連接失敗,需重建AlHessian可與原生Hessian互操作,基于HTTPJBoss的NIO框架,性能較好(推薦使用一次請(qǐng)求派發(fā)兩種,需無Al老牌NIOAlSun的NIO框架,應(yīng)用于GlassFish線程池不可擴(kuò)展,F(xiàn)ilter性能較好,多語言支持(推薦使用HssiHssi,D嵌了ssi..的源碼AlO純文本,可跨語言解析,缺省采用FastJsonJava通過字節(jié)碼生成代替反射,性能比較好(推薦使用java-XX:PermSize=128mAlJDKFailoverAlFailfastAlFailsafeForking需要浪費(fèi)服務(wù)資隨機(jī),按權(quán)重設(shè)置隨機(jī)概率(推薦使用Al情Al基于引擎的路由規(guī)則,功能強(qiáng)自動(dòng)加載META- 下的所有Spring配AlJetty啟動(dòng)一個(gè)內(nèi)嵌JettyAlLog4j用戶不能控制log4jAl(+)(+)配置項(xiàng)說明詳細(xì)配置項(xiàng),請(qǐng)參見:配置參考手冊(cè)API使用說明如果不想使用Spring配置,而希望通過API的方式進(jìn)行調(diào)用,請(qǐng)參見:API配置配置使用說明想知道如何使用配置,請(qǐng)參見:快速啟動(dòng)<?xmlversion="1.0"<beans"‐ <dubbo:application o‐world‐app"<dubbo:protocolname="dubbo"port="20880"所有者支持自定義參數(shù),用于不同擴(kuò)展點(diǎn)實(shí)現(xiàn)的特殊配置。<<dubbo:protocol<dubbo:parameterkey="queue""或:(2.1.0開始支持注意:xmlns:p=""<<beans""<dubbo:protocolname="jms""<dubbo:service/>服務(wù)配置,用于一個(gè)服務(wù),定義服務(wù)的元信息,一個(gè)服務(wù)可以用多個(gè)協(xié)議,一個(gè)服務(wù)也可以到多個(gè)中心<dubbo:reference/>配置,用于創(chuàng)建一個(gè)服務(wù),一個(gè)可以指向多個(gè)中心<dubbo:protocol/>協(xié)議配置,用于配置提供服務(wù)的協(xié)議信息,協(xié)議由提供方指定,消費(fèi)方接受<dubbo:application/><dubbo:module/> 中心配置,用于配置連 中心相關(guān)信息<dubbo:monitor/ 中心配置,用于配置連 中心相關(guān)信息,可選<dubbo:provider/>提供方的缺省值,當(dāng)ProtocolConfig和ServiceConfig<dubbo:consumer/>消費(fèi)方缺省配置,當(dāng)ReferenceConfig<dubbo:method/>方法配置,用于ServiceConfig和ReferenceConfig<dubbo:argument/>其中,服務(wù)提供方配置,通過URL經(jīng)由中心傳遞給消費(fèi)方理論上ReferenceConfig的非服務(wù)標(biāo)識(shí)配置,在ConsumerConfig,ServiceConfig,ProviderConfig(+)根 rors配。根 rrr,可將XML配置的名,加屬性名,用點(diǎn)分隔,多個(gè)屬性拆成多行比如:=foo等價(jià)于<dubbo:applicationname="foo"/>"/>如果XML有多行同名配置,可用id號(hào)區(qū)分,如果沒有id號(hào)將對(duì)所有同名生效比如:tocol.rmi.port=1234等價(jià)于<dubbo:protocolid="rmi"name="rmi"port="1099"/>(協(xié)議的id沒配時(shí),缺省使用協(xié)議名作為比如:dubbo.registry..address=0:9090等價(jià)于<dubbo:registryid=""address="0:9090"Properties最后,相當(dāng)于缺省值,只有XML沒有配置時(shí),perties的相應(yīng)配置會(huì)生效,通常用于共享公共配置,比如應(yīng)用名(+)2.2.1publicclassFooServiceImplimplementsFooService//}公共信息,也可以用pertiesimport publicclassBarAction}公共信息,也可以用perties也可以使用:(等價(jià)于前面的:<dubbo:annotationpackage="com.foo.bar.service"/>) ponent‐scan 及以后版本支持 ponent-scan,如果用的是Spring2.0及以前版本,需配置<beanid="barService"class="com.foo.BarServiceImpl"(+)API使用范圍API僅用于OpenAPI,ESB,Test,Mock等系統(tǒng)集成,普通服務(wù)提供方或消費(fèi)方,請(qǐng)采用配置方式使用Dubbo,請(qǐng)參見:Xml配置API屬性含義參考API屬性與配置項(xiàng)一對(duì)一,各屬性含義,請(qǐng)參見:配置參考手冊(cè)比如:ApplicationConfig.setName("xxx")對(duì)應(yīng)<dubbo:applicationname="xxx"/>importcom.alibaba.dubbo.rpc.config.RegistryConfig;importcom.alibaba.dubbo.rpc.config.ProviderConfig;importcom.alibaba.dubbo.rpc.config.ServiceConfig;importcom.xxx.XxxService;importXxxServicexxxService=newApplicationConfigapplication=newApplicationConfig();//連 RegistryConfigregistry=newRegistryConfig();ProtocolConfigprotocol=newProtocolConfig(); ServiceConfig<XxxService>service=newServiceConfig<XxxService>();//此實(shí)例很重,封裝了與 service.setRegistry(registry);//多個(gè) service.setProtocol(protocol);//多個(gè)協(xié)議可以用setProtocols() importcom.alibaba.dubbo.rpc.config.RegistryConfig;importcom.alibaba.dubbo.rpc.config.ConsumerConfig;importcom.alibaba.dubbo.rpc.config.ReferenceConfig;importcom.xxx.XxxService;ApplicationConfigapplication=newApplicationConfig();//連 RegistryConfigregistry=newRegistryConfig(); ReferenceConfig<XxxService>reference=newReferenceConfig<XxxService>();//此實(shí)例很重,封裝了與 reference.setRegistry(registry);//多個(gè) XxxServicexxxService=reference.get();//注意: (3.1)List<MethodConfig>methods=newArrayList<MethodConfig>();MethodConfigmethod=newMethodConfig();ReferenceConfig<XxxService>reference=newReferenceConfig<XxxService>();//此實(shí)例很重,封裝了 中心的連接以及與//(3.2)ReferenceConfig<XxxService>reference=newReferenceConfig<XxxService>();//此實(shí)例很重,封裝了與中心的連接以及與提 // (+)想完整的運(yùn)行起來,請(qǐng)參見:快速啟動(dòng)(+),這里只列出各種場(chǎng)景的配置方式以下示例全部使用基于Spring的Xml配置(+)作為參考,如果不想使用Spring,而希望通過API的方式進(jìn)行調(diào)用,請(qǐng)參見:API配置(+)(+)Dubbo缺省會(huì)在啟動(dòng)時(shí)檢查依賴的服務(wù)是否可用,不可用時(shí)會(huì)拋出異常,Spring初始化完成,以便上線時(shí),能及早發(fā)現(xiàn)問題,默認(rèn)如果你的Spring容器是懶加載的,或者通過API編程延遲服務(wù),請(qǐng)關(guān)閉check,否則服務(wù)臨時(shí)不可用時(shí),會(huì)拋出異常,拿到null引用,如果check=false,總是會(huì)返回,當(dāng)服務(wù)恢復(fù)時(shí),能自動(dòng)連上。關(guān)閉某個(gè)服務(wù)的啟動(dòng)時(shí)檢查:(沒有提供者錯(cuò))關(guān)閉所有服務(wù)的啟動(dòng)時(shí)檢查:(沒有提供者錯(cuò)<<dubbo:consumercheck="false"關(guān)閉中心啟動(dòng)時(shí)檢查:(訂閱失敗錯(cuò)<<dubbo:registrycheck="false"dd也可以用-Djavajavajavajavajava注意區(qū)別dubbo.reference.check=false,強(qiáng)制改變所有reference的check值,就算配置中 ,也會(huì)被覆蓋dubbo.consumer.check=false,是設(shè)置check的缺省值,如果配置中有顯式 ,如:<dubbo:referencecheck="true"/>,會(huì)受影響 (+)在集群調(diào)用失敗時(shí),Dubbo提供了多種容錯(cuò)方案,缺省為failover重試。這里的Invoker是Provider的一個(gè)可調(diào)用Service的抽象,Invoker封裝了Provider地址及Service LoadBalance負(fù)責(zé)從多個(gè)Invoker可通過retries="2"來設(shè)置重試次數(shù)(不含第一次)ForkingBroadcast重試次數(shù)配置如:(failover集群模式生效<<dubbo:serviceretries="2"<<dubbo:referenceretries="2"<dubbo:methodname="findFoo"retries="2"<<dubbo:servicecluster="failsafe"<<dubbo:referencecluster="failsafe"(+)RandomRoundRobinConsistentHash一致性Hash算法參見:/wiki/Consistent_hashing。缺省只對(duì)第一個(gè)參數(shù)Hash,如果要修改,請(qǐng)配置<dubbo:parameterkey="hash.arguments"value="0,1"/>缺省用160份虛擬節(jié)點(diǎn),如果要修改,請(qǐng)配置<dubbo:parameterkey="hash.nodes"value="320"/><<dubbo:service<dubbo:methodname="..."<<dubbo:reference<dubbo:methodname="..."(+)處理線程說明all所有消息都派發(fā)到線程池,包括請(qǐng)求,響應(yīng),連接,斷開,心跳等direct所有消息都不派發(fā)到線程池,全部在IOmessage只有請(qǐng)求響應(yīng)消息派發(fā)到線程池,其它連接斷開,心跳等消息,直接在IO線程上執(zhí)行execution只請(qǐng)求消息派發(fā)到線程池,不含響應(yīng),響應(yīng)和其它連接斷開,心跳等消息,直接在IO線程上執(zhí)行connection在IO線程上,將連接斷開放入隊(duì)列,有序逐個(gè)執(zhí)行,其它消息派發(fā)到線程池cached緩存線程池,空閑一分鐘自動(dòng)刪除,需要時(shí)重建。limited可伸縮線程池,但池中的線程數(shù)只會(huì)增長不會(huì)收縮。(為避免收縮時(shí)突然來了大流量引起的性能問題)<<dubbo:protocolname="dubbo"dispatcher="all"threadpool="fixed"threads="100"(+)點(diǎn)對(duì)點(diǎn)直聯(lián)方式,將以服務(wù)接口為單位,忽略中心的提供者列表,A接口配置點(diǎn)對(duì)點(diǎn),不影響B(tài)接口從中心獲取列表在JVM啟動(dòng)參數(shù)中加入-D(key為服務(wù)名,value為服務(wù)提供者url,此配置優(yōu)先級(jí)最高,1.0.15及以上版本支持javajava注意為了避免復(fù)雜化線上環(huán)境,不要上使用這個(gè)功能,只應(yīng)在測(cè)試階段使用javajava然后在映射文件perties(key為服務(wù)名,value為服務(wù)提供者注意為了避免復(fù)雜化線上環(huán)境,不 上使用這個(gè)功能,只應(yīng)在測(cè)試階段使用(+)問題解決方案可以讓服務(wù)提供者開發(fā)方,只訂閱服務(wù)(開發(fā)的服務(wù)可能依賴其它服務(wù)),而不正在開發(fā)的服務(wù),通過直連測(cè)試正在開發(fā)的服務(wù)禁用配置只(+)問題 的其它應(yīng)用都需要依賴此服務(wù),所以需要將服務(wù)同時(shí)到兩個(gè) 解決方案可以讓服務(wù)提供者方,只服務(wù)到另一中心,而不從另一中心訂閱服務(wù)(+)有時(shí)候希望人工管理服務(wù)提供者的上線和下線,此時(shí)需將中心標(biāo)識(shí)為非動(dòng)態(tài)管理模式。服務(wù)提供者初次時(shí)為禁用狀態(tài),需人工啟用,斷線時(shí),將不會(huì)被自動(dòng)刪除,需人工禁用如果是一個(gè) 獨(dú)立提供者,比如memcached等,可以直接向中心寫入提供者地址信息,消費(fèi)者正常使用(通常 中心頁面等調(diào)用Registryregistry=registryFactory.getRegistry(URL.valueOf("zookeeper://0:2181")); (+)<?xmlversion="1.0"<beansxmlns=""‐ <dubbo:applicationname="world" o1234"<dubbo:protocolname="dubbo"port="20880"<dubbo:protocolname="rmi"port="1099" 服務(wù) oService"version="1.0.0" oService"<!‐‐使用rmi協(xié) 服務(wù) 多協(xié)議服比如:需要與http<?<?xmlversion="1.0"<beansxmlns=""‐ <dubbo:applicationname="world" o1234"<dubbo:protocolname="dubbo"port="20880"<<dubbo:protocolname="hessian"port="8080" 服務(wù)<dubbo:serviceid=" oService"interface="com.alibaba. protocol="dubbo,hessian"/>多中(+)可以自行擴(kuò)展中心,參見:中心擴(kuò)多中比如:中文站有些服務(wù)來不及在青島部署,只在杭州部署,而青島的其它應(yīng)用需要此服務(wù),就可以將服務(wù)同時(shí)到兩個(gè)中心<?<?xmlversion="1.0"<beansxmlns=""‐ <dubbo:applicationname="world"<!‐‐ 中心配置<!‐‐向多 <dubbo:serviceinterface="com.alibaba. oService"version="1.0.0"ref=" registry="hangzhouRegistry,qingdaoRegistry"/>比如:有些服務(wù)是專門為國際站設(shè)計(jì)的,有些服務(wù)是專門為中文站設(shè)計(jì)的<?<?xmlversion="1.0"<beansxmlns=""‐ <dubbo:applicationname="world"<!‐‐ 中心配置 <dubbo:serviceinterface="com.alibaba. oService"version="1.0.0"ref=" Registry"/> <dubbo:serviceinterface="com.alibaba. registry="intlRegistry"/>多中心比如:需同時(shí)調(diào)用中文站和國際站的PC2服務(wù),PC2在中文站和國際站均有部署,接口及版本號(hào)都一樣,但連的數(shù)據(jù)庫不一樣<?<?xmlversion="1.0"<beansxmlns=""‐ <dubbo:applicationname="world"<!‐‐ 中心配置 中文站服務(wù)<dubbo:referenceid=" Registry"/> registry="intlRegistry"/>oService" oService"如果只是測(cè)試環(huán)境臨時(shí)需要連接兩個(gè)不同中心,使用豎號(hào)分隔多個(gè)不同中心地址<?xmlversion="1.0" ‐ <dubbo:applicationname="world"<!‐‐服務(wù)(+)當(dāng)一個(gè)接口有多種實(shí)現(xiàn)時(shí),可以用group區(qū)分。任意組:(2.2.0以上版本支持,總是只調(diào)一個(gè)可用組的實(shí)現(xiàn)(+)當(dāng)一個(gè)接口實(shí)現(xiàn),出現(xiàn)不兼容升級(jí)時(shí),可以用版本號(hào)過渡,版本號(hào)不同的服務(wù)相互間 不區(qū)分版本:(2.2.0以上版本支持(+)從2.1.0版本開始支持代碼參見 /albaba/dubbo/tree/master/dubbo-test/dubbo-test- /al配置如:(搜索所有分組<<dubbo:reference Service"group="*"merger="true"或:(合并指定分組 或:(指定方法合并結(jié)果,其它未指定的方法,將只調(diào)用一個(gè) Service"<dubbo:method Items"merger="true"或:(某個(gè)方法不合并結(jié)果,其它都合并結(jié)果 Service"group="*"<dubbo:method Items"merger="false" Service"<dubbo:method Items"merger="mymerge"或:(指定合并方法,將調(diào)用返回結(jié)果的指定方法進(jìn)行合并,合并方法的參數(shù)類型必須是返回結(jié)果類型本身 Service"<dubbo:method Items"merger=".addAll"(+)參數(shù)驗(yàn)證功能是基于JSR303實(shí)現(xiàn)的,用戶只需標(biāo)識(shí)JSR303標(biāo)準(zhǔn)的驗(yàn)證Annotation,并通過filter來實(shí)現(xiàn)驗(yàn)證。2.1.0以上版本支持完整示例代碼參見 /alibaba/dubbo/tree/master/dubbo-test/dubbo-test- importimportjavax.validation.constraints.Future;importjavax.validation.constraints.Max;importjavax.validation.constraints.Min;importjavax.validation.constraints.Past;importjavax.validation.constraints.Size;publicclassValidationParameterimplementsSerializableprivatestaticfinallongserialVersionUID= @NotNull//不允許為空@Size(min1max20privateString@NotNull(groups=ValidationService.Save.class)//保存時(shí)不允許為空,更新時(shí)允許為空,表示不更新該字段privateString;@Min(18)//最小值privateintage;privateDateprivateDatepublicString{return}publicvoidsetName(String{=};public ;{}publicvoid (String{ }publicint{return}publicvoidsetAge(int{this.age=}}publicDate{return}publicvoidsetLoginDate(Date{this.loginDate=}publicDate{return}publicvoidsetExpiryDate(Date{this.expiryDate=}}publicpublicinterfaceValidationService缺省可按服務(wù)接口區(qū)分驗(yàn)證場(chǎng)景,如:@NotNull(groupsValidationService.class)@interfaceSave{}//與方法同名接口,首字母大寫,用于區(qū)分驗(yàn)證場(chǎng)景,如:@NotNull(groups=voidsave(ValidationParameter}publicinterfaceValidationService{@interfacevoidsave(ValidationParameter@interfacevoidupdate(ValidationParameter}importimportpublicinterfaceValidationServicevoidsave(@NotNullValidationParameterparameter);voiddelete(@Min(1intid);}validation="true"/>validation="true"/>importimportimportimportimportcom.alibaba.dubbo.examples.validation.api.ValidationService;importcom.alibaba.dubbo.rpc.RpcException;publicclassValidationConsumerpublicstaticvoidmain(String[]args)throwsExceptionStringconfig= ce('.','/')+ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(config);ValidationServicevalidationService=//tryparameter=newValidationParameter();catch(RpcExceptione)拋出的是=)//}}}(+)結(jié)果緩存,用于加速熱門數(shù)據(jù)的速度,Dubbo提供式緩存,以減少用戶加緩存的工作量。2.1.0以上版本支持 /albaba/dubbo/tree/master/dubbo-test/dubbo-test-examples/ lru基于最近最少使用原則刪除多余緩存,保持最熱的數(shù)據(jù)被緩存。threadlocal當(dāng)前線程緩存,比如一個(gè)頁面渲染,用到很多portal,每個(gè)portal都要去查用戶信息,通過線程緩存,可以減少這種多余<<dubbo:reference<dubbo:methodname="findBar"cache="lru"泛化(+)泛接口調(diào)用方式主要用于客戶端沒有API接口及模型類元的情況,參數(shù)及返回值中的所有POJO均用Map表示,通常用于框架集成,比GenericServicebarService=(GenericService)Objectresult= o",newString[]{"java.lang.String"},newObject[]{"World"importReferenceConfig<GenericService>referencenewReferenceConfig<GenericService>(該實(shí)例很重量,里面封裝了所有與reference.setGeneric(true);// =();//Objectresult= o",newString[]{"java.lang.String"},newObject[]//用Map表示POJO參數(shù),如果返回值為POJO也將自動(dòng)轉(zhuǎn)成MapMap<String,Object> =newHashMap<String,Object>();.put("name",Objectresult=",new"new 假設(shè)存在POJOpackagepackagepublic Impl{privateStringname;privateStringpassword;publicStringgetName(){return}publicvoidsetName(String{=}publicString{return}publicvoidsetPassword(String{this.password=}}則POJO== 可用下面MapMap<String,Map<String,Object>map=newHashMap<String,, map.put("name",(+)泛接口實(shí)現(xiàn)方式主要用于服務(wù)器端沒有API接口及模型類元的情況,參數(shù)及返回值中的所有POJO均用Map表示,通常用于框架集成,packagepublicclassMyGenericServiceimplementsGenericServicepublicObject$invoke(StringmethodName,String[]parameterTypes,Object[]args)throws{if o".equals(methodName))return e"+}}}GenericServicexxxServicenewXxxGenericService用com.alibaba.dubbo.rpc.service.GenericService可以替代所有接口ServiceConfig<GenericService>service=newServiceConfig<GenericService>();//該實(shí)例很重量,里面封裝了所有與 (+)回聲測(cè)試用于檢測(cè)服務(wù)是否可用,回聲測(cè)試按照正常請(qǐng)求流程執(zhí)行,能夠測(cè)試整個(gè)調(diào)用是否通暢,可用于。所有服務(wù)自動(dòng)實(shí)現(xiàn)EchoService接口,只需將任意服務(wù)強(qiáng)制為EchoService,即可使用。MemberServicememberService=ctx.getBean("memberService");// EchoServiceechoService=(EchoService)memberService;//強(qiáng)制 Stringstatus=echoService.$echo("OK");//回聲測(cè)試可用性(+)上下文中存放的是當(dāng)前調(diào)用過程中所需的環(huán)境信息。所有配置信息都將轉(zhuǎn)換為URL的參數(shù),參見《配置項(xiàng)一覽表》中的“對(duì)應(yīng)URL參數(shù)”注意RpcContext是一個(gè)ThreadLocal的臨時(shí)狀態(tài)記錄器,當(dāng)接收到RPC請(qǐng)求,或發(fā)起RPC請(qǐng)求時(shí),RpcContext比如:A調(diào)B,B再調(diào)C,則B機(jī)器上,在B調(diào)C之前,RcCtxt記錄的是A調(diào)B的信息,在B調(diào)C之后,RcCtxt記錄的是B調(diào)C的信息。xxxService.xxxxxxService.xxx booleanisConsumerSideRpcContext.getContext().isConsumerSide本端是否為消費(fèi)端,這里會(huì)返回trueStringserverIP=RpcContext.getContext().getRemoteHost();//獲取最后一次調(diào)用的提供方IP地址StringapplicationRpcContext.getContext().getUrl().getParameter("application"獲取當(dāng)前服務(wù)配置信息,所有配置信息////publicpublicclassXxxServiceImplimplementspublicvoidxxx()//booleanisProviderSide=RpcContext.getContext().isProviderSide();//本端是否為提供端,這里會(huì)返回true IP=RpcContext.getContext().getRemoteHost();//獲取調(diào)用方IP地址StringapplicationRpcContext.getContext().getUrl().getParameter("application"獲取當(dāng)前服務(wù)配置信息,所//booleanisProviderSideRpcContext.getContext().isProviderSide此時(shí)本端變成消費(fèi)端,這里會(huì)返回//}}(+)注:path,group,version,dubbo,token,timeout幾個(gè)key有特殊處理,請(qǐng)使用其它key值。 ent("index","1");//隱式傳參,后面 xxxService.xxx //【注】setAttaent設(shè)置的KV,在完成下面一次調(diào)用會(huì)被清空。即多次調(diào)用要多次設(shè)置publicpublicclassXxxServiceImplimplementspublicvoidxxx()//Stringindex=RpcContext.getContext().getAtta ent("index"獲取客戶端隱式傳入的參數(shù),用于框架集成,不建議//}}}(+)基于NIO的非阻塞實(shí)現(xiàn)并行調(diào)用,客戶端不需要啟動(dòng)多線程即可完成并行調(diào)用多個(gè)服務(wù),相對(duì)多線程開銷較小。2.0.6及其以上版本支持//// // =();//BarbarbarFuture.get同理等待bar<<dubbo:referenceid="fooService"<dubbo:methodname="findFoo"async="true"<dubbo:referenceid="barService"<dubbo:methodname="findBar"async="true"sent="false"不等待消息發(fā)出,將消息放入IO<<dubbo:methodname="findFoo"async="true"sent="true"如果你只是想異步,完全忽略返回值,可以配置return="false",以減少Future<<dubbo:methodname="findFoo"async="true"return="false"(+)本地調(diào)用,使用了Injvm協(xié)議,是一個(gè)偽協(xié)議,它不開啟端口,不發(fā)起調(diào)用,只在JVM內(nèi)直接關(guān)聯(lián),但執(zhí)行Dubbo的Filter鏈Defineinjvm<<dubbo:protocolname="injvm"Setdefault<<dubbo:providerprotocol="injvm"Setservice<<dubbo:serviceprotocol="injvm"Useinjvm<<dubbo:consumerinjvm="true"<dubbo:providerinjvm="true"或<<dubbo:referenceinjvm="true"<dubbo:serviceinjvm="true"注意:服務(wù)與服務(wù)都需要injvm="true"自動(dòng)、本地服<dubbo:reference...scope="remote"(+)生成反向,這樣就可以從服務(wù)器端調(diào)用客戶端邏輯。2.0.6及其以上版本支持代碼參見 /albaba/dubbo/tree/master/dubbo-test/dubbo-test- /alpackagepublicinterfaceCallbackServicevoidaddListener(Stringkey,CallbackListener}packagepackagepublicinterface{voidchanged(String}packagepackageimportimportimportimportpublicclassCallbackServiceImplimplementsCallbackServiceprivatefinalMap<String,CallbackListener>listeners=newConcurrentHashMap<String,publicCallbackServiceImpl()Threadt=newThread(new{publicvoidrun(){tryfor(Map.Entry<String,CallbackListener>entry:listeners.entrySet()){try{}catch(Throwable{}}catch(Throwablet)}}}}publicvoidaddListener(Stringkey,CallbackListener{listeners.put(key,listener);listener.changed(getChanged(key)發(fā)送變更通知}privateStringgetChanged(Stringkey)return"Changed:"+newSimpleDateFormat("yyyy‐MM‐ddHH:mm:ss").format(new}}<dubbo:method<dubbo:argumentindex="1"callback="true"ClassPathXmlApplicationContextClassPathXmlApplicationContextcontext=newCallbackServicecallbackService=(CallbackService)publicvoidchanged(String{System.out.println("callback1:"+}",new(+)在調(diào)用之前,調(diào)用之后,出現(xiàn)異常時(shí),會(huì)觸發(fā)oninvoke,onreturn,onthrow三個(gè),可以配置當(dāng)發(fā)生時(shí),通知哪個(gè)類的哪個(gè)方支持版本:2.0.7interface{public }classNormalDemoServiceimplements{ get(intid)return (id,"charles`son",}}<dubbo:registry"服務(wù)消費(fèi)者CallbackinterfaceinterfaceNofifypublicvoidmsg,Integerpublicvoidonthrow(Throwableex,Integer}classNofifyImplimplementsNofifypublic =newpublicMap<Integer,Throwable>errors=newHashMap<Integer,publicvoidonreturn( msg,Integerid){System.out.println("onreturn:"+msg);ret.put(id,ret.put(id,}publicvoidonthrow(Throwableex,Integer{errors.put(id,}}服務(wù)消費(fèi)者Callback<beanid="demoCallback"class="com.alibaba.dubbo.callback.implicit.NofifyImpl"group="cn"><dubbo:methodname="get"async="true"onreturn="demoCallback.onreturn"onthrow="demoCallback.onthrow"注:onreturn表示是否需要回調(diào).組合情況:(async=false默認(rèn)異步回調(diào)模式:async=trueonreturn="xxx"同步回調(diào)模式:async=falseonreturn="xxx"異步無回調(diào):async=trueTESTIDemoServicedemoService=(IDemoService)NofifyImplnotify=(NofifyImpl)intrequestId=ret=demoService.get(requestId);Assert.assertEquals(null,ret);for(inti=0;i<10;i++)if{}else}}(+)存,提前驗(yàn)證參數(shù),調(diào)用失敗后容錯(cuò)數(shù)據(jù)等等,此時(shí)就需要在API中帶上Stub,客戶端生成實(shí),會(huì)把通過構(gòu)造函數(shù)傳給Stub,然后把Stub組給用戶,Stub可以決定要不要去調(diào)。Stub必須有可傳入的構(gòu)造函數(shù) packagepublicclassBarServiceStubimplements{privatefinalBarServicepublic(BarService{this.barService=}publicString o(Stringname)tryreturn }catch(Exceptione) return"容錯(cuò)數(shù)據(jù)}}}(+)Mock通常用于服務(wù)降級(jí),比如某驗(yàn)權(quán)服務(wù),當(dāng)服務(wù)提供方全部掛掉后,客戶端不拋出異常,而是通過Mock數(shù)據(jù)返回失敗。Mock是Stub的一個(gè)子集,便于服務(wù)提供方在客戶端執(zhí)行容錯(cuò)邏輯,因經(jīng)常需要在出現(xiàn)pcException(比如網(wǎng)絡(luò)失敗,超時(shí)等)時(shí)進(jìn)行容錯(cuò),而在出現(xiàn)業(yè)務(wù)異常(比如登錄用戶名錯(cuò)誤)時(shí)不需要容錯(cuò),如果用b,可能就需要捕獲并依賴n類,而用k就npackagepublicclassBarServiceMockimplementsBarServicepublicString o(Stringname)//你可 return"容錯(cuò)數(shù)據(jù)}}如果服務(wù)的消費(fèi)方經(jīng)常需要try-catchOfferOfferoffer=null;try{offer=}catch(RpcException{}請(qǐng)考慮改為Mock實(shí)現(xiàn),并在Mock中returnnull如果只是想簡單的忽略異常,在2.0.11<<dubbo:serviceinterface="com.foo.BarService"mock="returnnull"(+)<dubbo:servicedelay="5000"<dubbo:servicedelay="5000"延Spring初始化完成后,再服務(wù):(基于Spring的ContextRefreshedEvent觸發(fā)<<dubbo:servicedelay="‐1"Spring2.x初始化死鎖問題nren。r。規(guī)避辦法強(qiáng)烈建議不要在服務(wù)的實(shí)現(xiàn)類中有applicationContext.getBean()的調(diào)用,全部采用IoC注入的方式使用Spring的Bean如果實(shí)在要調(diào)getBean(),可以將Dubbo的配置放在Spring如果不想依賴配置順序,可以使用<dubbo:providerdey=”-1”/>,使Dubbo在Spring容器初始化完后,再服務(wù)如果大量使用getBean(),相當(dāng)于已經(jīng)把Spring為工廠模式在用,可以將Dubbo的服務(wù)單獨(dú)的Spring容器(+)限制com.foo.BarService的每個(gè)方法,服務(wù)器端并發(fā)執(zhí)行(或占用線程池線程數(shù))過10個(gè)限制com.foo.BarService的sayo方法,服務(wù)器端并發(fā)執(zhí)行(或占用線程池線程數(shù))過10個(gè)<<dubbo:service<dubbo:method o"executes="10"限制com.foo.BarService的每個(gè)方法,每客戶端并發(fā)執(zhí)行(或占用連接的請(qǐng)求數(shù))過10個(gè)限制com.foo.BarService的sayo方法,每客戶端并發(fā)執(zhí)行(或占用連接的請(qǐng)求數(shù))過10個(gè)<<dubbo:service<dubbo:method o"actives="10"<<dubbo:reference<dubbo:method o"actives="10"如果<dubbo:service>和<dubbo:reference>都配了actives,<dubbo:reference>LoadBalance配置服務(wù)的客戶端的loadbalance屬性為leastactive,此Loadbalance會(huì)調(diào)用并發(fā)數(shù)最小的Provider(Consumer端并發(fā)數(shù))(+)限務(wù)器端接受的連接過10個(gè):(以連接在Server上,所以配置在Provider上<dubbo:provider<dubbo:providerprotocol="dubbo"accepts="10"<dubbo:protocolname="dubbo"accepts="10"限制客戶端服務(wù)使用連接連接數(shù):(如果是長連接,比如Dubbo協(xié)議,connections表示該服務(wù)對(duì)每個(gè)提供者建立的長連接數(shù)如果<dubbo:service>和<dubbo:reference>都配了connections,<dubbo:reference>(+)延遲連接,用于減少長連接數(shù),當(dāng)有調(diào)用發(fā)起時(shí),再創(chuàng)建長連接。只對(duì)使用長連接的dubbo協(xié)議生效。<<dubbo:protocolname="dubbo"lazy="true"(+)粘滯連接用于有狀態(tài)服務(wù),盡可能讓客戶端總是向同一提供者發(fā)起調(diào)用,除非該提供者掛了,再連另一臺(tái)。粘滯連接將自動(dòng)開啟延遲連接,以減少長連接數(shù),參見:延遲連接<<dubbo:protocolname="dubbo"sticky="true"(+)防止消費(fèi)者繞過中心提供 <dubbo:protocolname="dubbo"token="true" <dubbo:protocolname="dubbo"token="123456"(+)2.2.0以上版本支持路由規(guī)則擴(kuò)展點(diǎn):路由擴(kuò)展向中心寫入路由規(guī)則:(通常由中心或治理中心的頁面完成Registryregistry=registryFactory.getRegistry(URL.valueOf("zookeeper://0:2181")); .foo.BarService?category=routers&dynamic=false&rule="+ =0=>host=1")+"));表示路由規(guī)則的類型,支持條件路由規(guī)則 路由規(guī)則,可擴(kuò)展,必填表示對(duì)所有IP地址生效,如果只想對(duì)某個(gè)IP的生效,請(qǐng)?zhí)钊刖唧wIP表示該數(shù)據(jù)為持久數(shù)據(jù),當(dāng)方退出時(shí),數(shù)據(jù)依然保存在中心,必填當(dāng)路由結(jié)果為空時(shí),是否強(qiáng)制執(zhí)行,如果不強(qiáng)制執(zhí)行,路由結(jié)果為空的路由規(guī)則將自動(dòng)失效,可不填,缺省為flase路由規(guī)則的優(yōu)先級(jí),用于排序,優(yōu)先級(jí)越大越靠前執(zhí)行,可不填,缺省為0rule=URL.encode("host=0=>host=hosthost=0=>host=如果匹配條件為空,表示對(duì)所有消費(fèi)方應(yīng)用,如:=>host!=如果過濾條件為空,表示,如:host=0服務(wù)調(diào)用信息,如:method,argument(暫不支持參數(shù)路由URL本身的字段,如:protocol,host,port等號(hào)"="表示"匹配",如:host不等號(hào)"!="表示"不匹配",如:host以逗號(hào)","分隔多個(gè)值,如:host以星號(hào)"*"結(jié)尾,表示通配,如:host!=以符"$"開頭,表示消費(fèi)者參數(shù),如:host==>=>host!=白:(注意:一個(gè)服務(wù)只能有一條白規(guī)則,否則兩條規(guī)則交叉,就都被篩選掉了hosthost!=0,1:hosthost=0,1服務(wù)寄宿在應(yīng)用上,只一部分的機(jī)器,防止整個(gè)集群掛掉=>=>host=applicationapplication!=kylin=>host!=methodmethod=find*,list*,get*,is*=>host=method!=find*,list*,get*,is*=>host=前分離applicationapplication=bops=>host=application!=bops=>host=hosthost!=172.22.3.*=>host!=提供者與消費(fèi)者部署在同集群內(nèi),本機(jī)只本機(jī)的服務(wù)=>=>host=支持JDK引擎的所有,比如:javascript,jruby,groovy等,通過type=javascript參數(shù)設(shè)置類型,缺省為javascript。 ...}基于引擎的路由規(guī)則,如functionfunctionroute(invokers)varresult=newfor(i=0;i<invokers.size();i++)if{}}returninvokers(+)2.2.0以上版本支持向中心寫入動(dòng)態(tài)配置覆蓋規(guī)則:(通常由中心或治理中心的頁面完成Registryregistry=registryFactory.getRegistry(URL.valueOf("zookeeper://0:2181")); 表示數(shù)據(jù)采用覆蓋方式,支持override和absent表示對(duì)所有IP地址生效,如果只想覆蓋某個(gè)IP的數(shù)據(jù),請(qǐng)?zhí)钊刖唧wIP表示該數(shù)據(jù)為持久數(shù)據(jù),當(dāng)方退出時(shí),數(shù)據(jù)依然保存在中心,必填禁用提供者:(通常用于臨時(shí)踢除某臺(tái)提供者機(jī)器,相似的,消費(fèi)者請(qǐng)使用路由規(guī)則調(diào)整權(quán)重:(通常用于容量評(píng)估,缺省權(quán)重為 調(diào)整負(fù)載均衡策略:(缺省負(fù)載均衡策略為 服務(wù)降級(jí):(通常用于臨時(shí)某個(gè)出錯(cuò)的非關(guān)鍵服務(wù) (+)2.2.0以上版本支持向中心寫入動(dòng)態(tài)配置覆蓋規(guī)則:(通過由中心或治理中心的頁面完成Registryregistry=registryFactory.getRegistry(URL.valueOf("zookeeper://0:2181")); (+)Dubbo是通過JDK的ShutdownHook來完成優(yōu)雅停機(jī)的,所以如果用戶使用"kill9PID"等強(qiáng)制關(guān)閉指令,是不會(huì)執(zhí)行優(yōu)雅停機(jī)的,只有通過"killPID"時(shí),才會(huì)執(zhí)行。<dubbo:parameterkey=<dubbo:parameterkey="shutdown.timeoutvalue="60000"如果ShutdownHook(+)缺省主機(jī)IP通過LocalHost.getLocalHost()如果是127.*等loopback地址,則掃描各網(wǎng)卡,獲取網(wǎng)卡IP的地址如果獲取不正確,比如需要公網(wǎng)地址,可以可以在/etc/hosts中加入:機(jī)器名公網(wǎng)IPtest1test1在dubbo.xml<<dubbo:protocol或在pertiesdubbo:rmi:http:hessian:webservice:memcached:redis:在dubbo.xml<<dubbo:protocolname="dubbo"3.或在perties(+)2.2.1以上版本支持?jǐn)U展點(diǎn):日志適配擴(kuò)展javajava<dubbo:applicationlogger="log4j"(+)如果你想記錄每一次請(qǐng)求信息,可開啟日志,類似于apache的日志。將日志輸出到當(dāng)前應(yīng)用的log4j日志<<dubbo:protocolaccesslog="true"將日志輸出到指定文件<<dubbo:protocol"(+)服務(wù)容器只是一個(gè)簡單的Main方法,并加載一個(gè)簡單的Spring容器,用于服務(wù)。服務(wù)容器的加載內(nèi)容可以擴(kuò)展,內(nèi)置了spring,jetty,log4j等加載,可通過Container擴(kuò)展點(diǎn)進(jìn)行擴(kuò)展,參見:ContainerSpring dubbo.spring.config=classpath*:META- 配置springJetty啟動(dòng)一個(gè)內(nèi)嵌Jetty dubbo.jetty.directory=/foo/bar配置可通過jetty直接 ,用于存放靜態(tài)文 Log4j dubbo.log4j.subdirectory=20880配置日志 ,用于多進(jìn)程啟動(dòng),避如:(缺省只加載javajava或:(通過main函數(shù)參數(shù)傳入要加載的容器javajavacom.alibaba.dubbo.container.Mainspringjetty或:(通過JVM啟動(dòng)參數(shù)傳入要加載的容器javajavacom.alibaba.dubbo.container.Main或:(通過classpath下的perties配置傳入要加載的容器ReferenceConfig(+)o0rgReferenceConfig<XxxService>ReferenceConfig<XxxService>reference=newReferenceConfig<XxxService>();ReferenceConfigCachecache=XxxServicexxxServicecache.get(referencecache.get方法中會(huì)CacheReference對(duì)象,并且調(diào)用ReferenceConfig.get方法 消除Cache中的ReferenceConfig,銷毀ReferenceConfigReferenceConfigCacheReferenceConfigCachecache=ReferenceConfigCache.getCache();r。KeyGeneratorKeyGeneratorkeyGenerator=newReferenceConfigCachecache=ReferenceConfigCache.getCache(keyGenerator(+)基于JTA/XA規(guī)范實(shí)現(xiàn)。暫未實(shí)現(xiàn)。(+)Dubbo的常規(guī)功能,都保持零侵入,但有些功能不得不用API侵入才能實(shí)現(xiàn)。Dubbo中除這里以外的接口或類,都是內(nèi)部接口或擴(kuò)展接口,普通用戶請(qǐng)不要直接依賴,否則升級(jí)版本可能出現(xiàn)不兼容。API配置com.albaba.dubbo.config.ServiceConfigcom.albaba.dubbo.config.ProtocolConfigcom.albaba.dubbo.config.RegistryConfigcom.albaba.dubbo.config.MonitorConfigcom.albaba.dubbo.config.ApplicationConfigcom.albaba.dubbo.config.ModuleConfigcom.albaba.dubbo.config.ProviderConfigcom.albaba.dubbo.config.MethodConfigcom.albaba.dubbo.config.ArgumentConfig參見:API注解com.albaba.dubbo.config.annotation.Servicecom.albaba.dubbo.config.annotation.Reference模型 com.alcom.al服務(wù)com.albaba.dubbo.rpc.service.GenericServicecom.albaba.dubbo.rpc.service.GenericException參見:泛化&泛化實(shí)com.al(+)這里以Xml配置為準(zhǔn),列舉所有配置項(xiàng),其它配置方式,請(qǐng)參見相應(yīng)轉(zhuǎn)換關(guān)系:屬性配置,注解配置,API配置服務(wù)發(fā)現(xiàn):表示該配置項(xiàng)用于服務(wù)的與發(fā)現(xiàn),目的是讓消費(fèi)方找到提供方。所有配置最終將轉(zhuǎn)換為UR表示,并由服務(wù)供方生成,經(jīng)中心傳遞給費(fèi)方,各屬性應(yīng)UR的參數(shù),參見配置項(xiàng)一表中的"對(duì)應(yīng)UR參數(shù)"列。URLSchema:(+)服務(wù)提供者服務(wù)配置對(duì)應(yīng)URL服務(wù)對(duì)象實(shí)現(xiàn)0延遲服務(wù)時(shí)間(毫秒),設(shè)為-1時(shí),表示延容器初始化完成時(shí)服服務(wù)調(diào)用超時(shí)時(shí)間(毫秒優(yōu)2對(duì)每個(gè)提供者的最大連接數(shù),ri、p、n等短連ore, 類名,即:接口名+Local XxxServiceLocal(XxxServicexxxService)向指定中心,在多 中心時(shí)使用,值 服務(wù),用于服務(wù)治理,請(qǐng)?zhí)顚懝距]箱前服務(wù)文檔0優(yōu)0生成動(dòng)態(tài)方式,可選服務(wù)提供方導(dǎo)出服務(wù)器名稱,多個(gè)名稱用逗號(hào)分使用指定的協(xié)議服務(wù),在多協(xié)議時(shí)使用,值<dubbo:protocol>的id屬性,多個(gè)協(xié)議ID服務(wù)提供者所在的分層。如:biz、dao、intl:web:acton該協(xié)議的服務(wù)是否到中(+)服務(wù)消費(fèi)者服務(wù)配置對(duì)應(yīng)URL服務(wù)的服務(wù)方法調(diào)用超時(shí)時(shí)間(毫秒的優(yōu)的的的的的該本地類的構(gòu)造函數(shù)必須允許傳入選:lru,threadlocal,jcache等選擇動(dòng)態(tài)實(shí)現(xiàn)策略,可選javassist,客戶端傳輸類型設(shè)置,如Dubbonetty或mina 0可性2.0.5選本服務(wù)調(diào)用者所在的分層。如:bizdao、intl:web、:acton2.0.10(+)說明:如果需要支持多協(xié)議,可以多個(gè)<dubbo:protocol>,并在<dubbo:service>中通過protocol屬性指定使用的協(xié)議如果配置為-1或者沒有配置的端口。Dubbo2.4.0+,分配自動(dòng)查找本機(jī)線類型,可選服務(wù)線大小(固定大小cpu個(gè)數(shù)io線大小(固定大小可0性選 以及http協(xié)議的json提供者上下文路徑,為服務(wù)pathdubbo協(xié)議缺省為dubbo協(xié)議缺省為dubbo協(xié)議缺省為message,execution,connection等0UTF-0該協(xié)議的服務(wù)是否到中(+)rrr中對(duì)應(yīng)URL中心BeanId,可以在<dubbo:serviceregistry=""><dubbo:referenceregistry="">中此中心,請(qǐng)配置多個(gè)中心缺省端口,當(dāng)address值登錄中心用戶名,如果中心不需要驗(yàn)證可不登錄中心,如果中心不需要驗(yàn)證可不網(wǎng)絡(luò)傳輸方式,可選中心請(qǐng)求超時(shí)時(shí)間(毫秒0停止時(shí)等待通知完成時(shí)間(毫秒是否向此中心服務(wù),如果設(shè)為false,將只訂閱,是否向此中心訂閱服務(wù),如果設(shè)為false,將只,不訂(+)URL數(shù)rr監(jiān)。2.0.9直連中心服務(wù)器地址(+)對(duì)應(yīng)URL應(yīng)用,用于服務(wù)治理,請(qǐng)?zhí)顚懝距]箱前化(+)對(duì)應(yīng)URL當(dāng)前模塊名稱,用于中算模塊間依賴關(guān)模塊,用于服務(wù)治理,請(qǐng)?zhí)顚懝距]箱前(+)說明:該為<dubbo:service>和<dubbo:protocol>的缺省值設(shè)置對(duì)應(yīng)URL自動(dòng)查找本機(jī)服務(wù)主機(jī)名,多網(wǎng)卡選擇或指定VIP服務(wù)線大小(固定大小提供者上下文路徑,為服務(wù)path優(yōu) 線類型,可選01.00 服務(wù)調(diào)用超時(shí)時(shí)間(毫秒20可服設(shè)為true,表示使用缺省類名,即:選+Local口名+Mock后綴。向指定中心,在多個(gè)中心時(shí)使用,值為r>的d屬性,多個(gè)注冊(cè)中心D用逗號(hào)分隔,如果不想將該服務(wù)注r/A設(shè)為true,將向logger中輸出日志,也可填寫日志文件路徑,直接把日志輸服務(wù)文檔00生成動(dòng)態(tài)方式,可選0UTF-CPU+所支持的net命令,多個(gè)命令用逗號(hào)分服務(wù)提供者所在的分層。如:biz、daointl:web、:acton(+)說明:該為<dubbo:reference>的缺省值設(shè)置對(duì)應(yīng)URL服務(wù)調(diào)用超時(shí)時(shí)間(毫秒1.0.16生成動(dòng)態(tài)方式,可選.502.0.5failover/failfast/failsafe/fai.52.0.5 2.0.5服務(wù)調(diào)用者所在的分層。如:biz、daointl:web、:acton.10threadlocal,jcache等(+)說明:該為<dubbo:service>或<dubbo:reference>的子,用于控制到方法級(jí)對(duì)應(yīng)URL1.0.8缺省為的方法調(diào)用超時(shí)時(shí)間(毫秒1.0.8的2.0.02.0.0的.602.0.50制,此屬性只在<dubbo:service>子時(shí)有2.0.5<dubbo:service>子時(shí)有2.0.5設(shè)置true該接口上的所有方法使.6方法執(zhí)行前.62.0.6果,可選:lru,threadlocal,<<dubbo:reference<dubbo:methodname="findXxx"timeout="3000"retries="2"(+)說明:該為<dubbo:method>的子,用于方法參數(shù)的特征描述,比如<<dubbo:methodname="findXxx"timeout="3000"<dubbo:argumentindex="0"callback="true"對(duì)應(yīng)URL通過參數(shù)類型查找參數(shù)的 向,可以從服務(wù)提供方反向調(diào)用消費(fèi)方,通常用 推送(+)該rr子該對(duì)應(yīng)URL2.0.02.0.0<<dubbo:protocol"value="xxx"<<dubbo:protocolname="jms"p:queue="xxx"(+)推薦使用Dubbo協(xié)議性能測(cè)試報(bào)告各協(xié)議的性能情況,請(qǐng)參見:性能測(cè)試報(bào)告(+)Dubbo缺省協(xié)議不適合傳送大數(shù)據(jù)量的服務(wù),比如傳文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論