電子商務(wù)是電商嗎seo服務(wù)商
#Dubbo#
文章內(nèi)容
- Dubbo服務(wù)導(dǎo)出基本原理分析
- Dubbo服務(wù)注冊(cè)流程源碼分析
- Dubbo服務(wù)暴露流程源碼分析
服務(wù)導(dǎo)出的入口方法為ServiceBean.export(),此方法會(huì)調(diào)用ServiceConfig.export()方法,進(jìn)行真正的服務(wù)導(dǎo)出。
1. 服務(wù)導(dǎo)出大概原理
服務(wù)導(dǎo)出的入口方法為ServiceBean.export(),此方法會(huì)調(diào)用ServiceConfig.export()方法,進(jìn)行真正的服務(wù)導(dǎo)出。
服務(wù)導(dǎo)出的入口為ServiceBean中的export()方法,當(dāng)Spring啟動(dòng)完之后,通過(guò)接收Spring的ContextRefreshedEvent事件來(lái)觸發(fā)export()方法的執(zhí)行。
一個(gè)ServiceBean對(duì)象就表示一個(gè)Dubbo服務(wù),ServiceBean對(duì)象中的參數(shù)就表示服務(wù)的參數(shù),比如timeout,該對(duì)象的參數(shù)值來(lái)至@Service注解中所定義的。
服務(wù)導(dǎo)出主要得做兩件事情:
- 根據(jù)服務(wù)的參數(shù)信息,啟動(dòng)對(duì)應(yīng)的網(wǎng)絡(luò)服務(wù)器(netty、tomcat、jetty等),用來(lái)接收網(wǎng)絡(luò)請(qǐng)求
- 將服務(wù)的信息注冊(cè)到注冊(cè)中心
但是在做這兩件事情之前得先把服務(wù)的參數(shù)確定好,因?yàn)橐粋€(gè)Dubbo服務(wù)的參數(shù),除開(kāi)可以在@Service注解中去配置,還會(huì)繼承Dubbo服務(wù)所屬應(yīng)用(Application)上的配置,還可以在配置中心或JVM環(huán)境變量中去配置某個(gè)服務(wù)的參數(shù),所以首先要做的是確定好當(dāng)前服務(wù)最終的(優(yōu)先級(jí)最高)的參數(shù)值。
確定好服務(wù)參數(shù)之后,就根據(jù)所配置的協(xié)議啟動(dòng)對(duì)應(yīng)的網(wǎng)絡(luò)服務(wù)器。在啟動(dòng)網(wǎng)絡(luò)服務(wù)器時(shí),并且在網(wǎng)絡(luò)服務(wù)器接收請(qǐng)求的過(guò)程中,都可以從服務(wù)參數(shù)中獲取信息,比如最大連接數(shù),線程數(shù),socket超時(shí)時(shí)間等等。
啟動(dòng)完網(wǎng)絡(luò)服務(wù)器之后,就將服務(wù)信息注冊(cè)到注冊(cè)中心。同時(shí)還有向注冊(cè)中心注冊(cè)監(jiān)聽(tīng)器,監(jiān)聽(tīng)Dubbo的中的動(dòng)態(tài)配置信息變更。
服務(wù)概念的演化
- DemoService接口表示一個(gè)服務(wù),此時(shí)的服務(wù)表示服務(wù)定義
- DemoServiceImpl表示DemoService服務(wù)的具體實(shí)現(xiàn),此時(shí)的服務(wù)表示服務(wù)的具體實(shí)現(xiàn)
- DemoService+group+version表示一個(gè)服務(wù),此時(shí)的服務(wù)增加了分組和版本概念
- http://192.168.1.112:80/com.tuling.DemoService表示一個(gè)服務(wù),此時(shí)的服務(wù)增加了機(jī)器IP和Port,表示遠(yuǎn)程機(jī)器可以訪問(wèn)這個(gè)URL來(lái)使用com.tuling.DemoService這個(gè)服務(wù)
- http://192.168.1.112:80/com.tuling.DemoService?timeout=3000&version=1.0.1&application=dubbo-demo-provider-application表示一個(gè)服務(wù),此時(shí)的服務(wù)是擁有參數(shù)的,比如超時(shí)時(shí)間、版本號(hào)、所屬應(yīng)用
在dubbo中就是用的最后一種方式來(lái)表示服務(wù)的。
2. 服務(wù)導(dǎo)出思路
服務(wù)導(dǎo)出要做的幾件事情:
- 確定服務(wù)的參數(shù)
- 確定服務(wù)支持的協(xié)議
- 構(gòu)造服務(wù)最終的URL
- 將服務(wù)URL注冊(cè)到注冊(cè)中心去
- 根據(jù)服務(wù)支持的不同協(xié)議,啟動(dòng)不同的Server,用來(lái)接收和處理請(qǐng)求
- 因?yàn)镈ubbo支持動(dòng)態(tài)配置服務(wù)參數(shù),所以服務(wù)導(dǎo)出時(shí)還需要綁定一個(gè)監(jiān)聽(tīng)器Listener來(lái)監(jiān)聽(tīng)服務(wù)的參數(shù)是否有修改,如果發(fā)現(xiàn)有修改,則需要重新進(jìn)行導(dǎo)出
2.1 確定服務(wù)的參數(shù)
在執(zhí)行ServiceConfig.export()時(shí),此時(shí)ServiceConfig對(duì)象就代表一個(gè)服務(wù),我們已經(jīng)知道了這個(gè)服務(wù)的名字(就是接口的名字),并且此時(shí)這個(gè)服務(wù)可能已經(jīng)有一些參數(shù)了,就是@Service注解上所定義的參數(shù)。
但是在Dubbo中,除開(kāi)可以在@Service注解中給服務(wù)配置參數(shù),還有很多地方也可以給服務(wù)配置參數(shù),比如:
- dubbo.properties文件,你可以建立這個(gè)文件,dubbo會(huì)去讀取這個(gè)文件的內(nèi)容作為服務(wù)的參數(shù),Dubob的源碼中叫做PropertiesConfiguration
- 配置中心,dubbo在2.7版本后就支持了分布式配置中心,你可以在Dubbo-Admin中去操作配置中心,分布式配置中心就相當(dāng)于一個(gè)遠(yuǎn)程的dubbo.properties文件,你可以在Dubbo-Admin中去修改這個(gè)dubbo.properties文件,當(dāng)然配置中心支持按應(yīng)用進(jìn)行配置,也可以按全局進(jìn)行配置兩種,在Dubbo的源碼中AppExternalConfiguration表示應(yīng)用配置,ExternalConfiguration表示全局配置。
- 系統(tǒng)環(huán)境變量,你可以在啟動(dòng)應(yīng)用程序時(shí),通過(guò)-D的方式來(lái)指定參數(shù),在Dubbo的源碼中叫SystemConfiguration
- 再加上通過(guò)@Service注解所配置的參數(shù),在Dubbo的源碼中叫AbstractConfig
服務(wù)的參數(shù)可以從這四個(gè)位置來(lái),這四個(gè)位置上如果配了同一個(gè)參數(shù)的