資料內(nèi)容:
服務(wù)導(dǎo)出?概原理(?試時可以這么答)
服務(wù)導(dǎo)出的??為ServiceBean中的export()?法,當Spring啟動完之后,通過接收Spring的
ContextRefreshedEvent事件來觸發(fā)export()?法的執(zhí)?。
?個ServiceBean對象就表示?個Dubbo服務(wù),ServiceBean對象中的參數(shù)就表示服務(wù)的參數(shù),?如
timeout,該對象的參數(shù)值來?@Service注解中所定義的。
服務(wù)導(dǎo)出主要得做兩件事情:
1. 根據(jù)服務(wù)的參數(shù)信息,啟動對應(yīng)的?絡(luò)服務(wù)器(netty、tomcat、jetty等),?來接收?絡(luò)請求
2. 將服務(wù)的信息注冊到注冊中?
但是在做這兩件事情之前得先把服務(wù)的參數(shù)確定好,因為?個Dubbo服務(wù)的參數(shù),除開可以在@Service注
解中去配置,還會繼承Dubbo服務(wù)所屬應(yīng)?(Application)上的配置,還可以在配置中?或JVM環(huán)境變量
中去配置某個服務(wù)的參數(shù),所以?先要做的是確定好當前服務(wù)最終的(優(yōu)先級最?)的參數(shù)值。
確定好服務(wù)參數(shù)之后,就根據(jù)所配置的協(xié)議啟動對應(yīng)的?絡(luò)服務(wù)器。在啟動?絡(luò)服務(wù)器時,并且在?絡(luò)服
務(wù)器接收請求的過程中,都可以從服務(wù)參數(shù)中獲取信息,?如最?連接數(shù),線程數(shù),socket超時時間等
等。
啟動完?絡(luò)服務(wù)器之后,就將服務(wù)信息注冊到注冊中?。同時還有向注冊中?注冊監(jiān)聽器,監(jiān)聽Dubbo的
中的動態(tài)配置信息變更。
服務(wù)概念的演化
1. DemoService接?表示?個服務(wù),此時的服務(wù)表示服務(wù)定義
2. DemoServiceImpl表示DemoService服務(wù)的具體實現(xiàn),此時的服務(wù)表示服務(wù)的具體實現(xiàn)
3. DemoService+group+version表示?個服務(wù),此時的服務(wù)增加了分組和版本概念
4. http://192.168.1.112:80/com.tuling.DemoService表示?個服務(wù),此時的服務(wù)增加了機器IP和Port,
表示遠程機器可以訪問這個URL來使?com.tuling.DemoService這個服務(wù)
5. http://192.168.1.112:80/com.tuling.DemoService?
timeout=3000&version=1.0.1&application=dubbo-demo-provider-application表示?個服務(wù),
此時的服務(wù)是擁有參數(shù)的,?如超時時間、版本號、所屬應(yīng)?
在dubbo中就是?的最后?種?式來表示服務(wù)的。
服務(wù)導(dǎo)出要做的?件事情:
1. 確定服務(wù)的參數(shù)
2. 確定服務(wù)?持的協(xié)議
3. 構(gòu)造服務(wù)最終的URL
4. 將服務(wù)URL注冊到注冊中?去
5. 根據(jù)服務(wù)?持的不同協(xié)議,啟動不同的Server,?來接收和處理請求
6. 因為Dubbo?持動態(tài)配置服務(wù)參數(shù),所以服務(wù)導(dǎo)出時還需要綁定?個監(jiān)聽器Listener來監(jiān)聽服務(wù)的參數(shù)
是否有修改,如果發(fā)現(xiàn)有修改,則需要重新進?導(dǎo)出