W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
對(duì)于 Dubbo-go 微服務(wù)框架,網(wǎng)絡(luò)協(xié)議為遠(yuǎn)程過程調(diào)用中負(fù)責(zé)網(wǎng)絡(luò)通信的模塊,負(fù)責(zé)應(yīng)用層到網(wǎng)絡(luò)層的數(shù)據(jù)序列化、打包、請(qǐng)求發(fā)起、網(wǎng)絡(luò)端口監(jiān)聽等功能。Dubbo-go 為協(xié)議抽象了一套接口如下:
type Protocol interface { // Export service for remote invocation Export(invoker Invoker) Exporter // Refer a remote service Refer(url *common.URL) Invoker // Destroy will destroy all invoker and exporter, so it only is called once. Destroy() }
該接口包含三個(gè)方法。其中 Export 方法負(fù)責(zé)服務(wù)的暴露過程。入?yún)?invoker 為dubbo 的概念,其封裝了一個(gè)可以被調(diào)用的實(shí)例。在具體網(wǎng)絡(luò)協(xié)議(例如Triple)實(shí)現(xiàn)的 Export 方法中,會(huì)針對(duì)特定的協(xié)議,將封裝有一定邏輯的可調(diào)用實(shí)例 Invoker 以網(wǎng)絡(luò)端口監(jiān)聽的形式暴露給外部服務(wù),來自外部針對(duì)該網(wǎng)絡(luò)端口的請(qǐng)求將會(huì)被 Export 方法開啟的監(jiān)聽協(xié)程獲取,進(jìn)而根據(jù)網(wǎng)絡(luò)協(xié)議進(jìn)行拆解包和反序列化,得到解析后的請(qǐng)求數(shù)據(jù)。
Refer 方法負(fù)責(zé)服務(wù)的引用過程,其入?yún)?url 為 dubbo 框架通用的結(jié)構(gòu),可以描述一個(gè)希望引用的服務(wù),url 參數(shù)中包含了多個(gè)希望引用服務(wù)的參數(shù),例如對(duì)應(yīng)服務(wù)的接口名(interface),版本號(hào)(version),使用協(xié)議(protocol) 等等。在具體網(wǎng)絡(luò)協(xié)議(例如Triple)實(shí)現(xiàn)的 Refer 方法中,會(huì)將特定的網(wǎng)絡(luò)協(xié)議封裝到 Invoker 可調(diào)用實(shí)例的方法中,用戶層發(fā)起的 RPC 調(diào)用即可直接通過返回的 Invoker 對(duì)象,發(fā)起特定協(xié)議的網(wǎng)絡(luò)請(qǐng)求。
Destroy 方法作用為銷毀當(dāng)前暴露的服務(wù),用于服務(wù)下線場(chǎng)景。Dubbo-go 框架有優(yōu)雅下線機(jī)制,可以在服務(wù)進(jìn)程終止前以監(jiān)聽信號(hào)的形式,下線所有已啟動(dòng)的服務(wù)。
Dubbo-go 3.0 版本支持的網(wǎng)絡(luò)協(xié)議和序列化方式如下:
協(xié)議 | 協(xié)議名 (用于配置) | 序列化方式 | 默認(rèn)序列化方式 |
---|---|---|---|
Triple | tri | pb hessian2 msgpack custome | pb |
Dubbo | dubbbo | hessian2 | hessian2 |
gRPC | grpc | pb | pb |
jsonRPC | jsonrpc | json | json |
在快速開始章節(jié)可以看到,在配置的過程中將 Protocol 設(shè)置為 tri,表明使用 Triple 協(xié)議進(jìn)行服務(wù)暴露和服務(wù)調(diào)用。快速開始章節(jié)使用的配置 API 進(jìn)行配置的寫入,這樣的好處是無需使用配置文件。我們摘取出和網(wǎng)絡(luò)協(xié)議相關(guān)的內(nèi)容進(jìn)行說明。
rc := config.NewRootConfigBuilder(). SetConsumer(config.NewConsumerConfigBuilder(). AddReference("GreeterClientImpl", config.NewReferenceConfigBuilder(). SetInterface("org.apache.dubbo.UserProvider"). SetProtocol("tri"). // set reference protcol to triple Build()). Build()). Build()
rc := config.NewRootConfigBuilder(). SetProvider(config.NewProviderConfigBuilder(). AddService("GreeterProvider", config.NewServiceConfigBuilder(). SetInterface("org.apache.dubbo.UserProvider"). SetProtocolIDs("tripleProtocolKey"). // use protocolID 'tripleProtocolKey' Build()). Build()). AddProtocol("tripleProtocolKey", config.NewProtocolConfigBuilder(). // define protocol config with protocolID 'tripleProtocolKey' SetName("tri"). // set service protocol to triple Build()). Build()
參考 samples/helloworld
dubbo: consumer: references: GreeterClientImpl: protocol: tri # set protcol to tri interface: com.apache.dubbo.sample.basic.IGreeter
dubbo: protocols: triple: # define protcol-id 'triple' name: tri # set protcol to tri port: 20000 # set port to be listened provider: services: GreeterProvider: protocol-ids: triple # use protocol-ids named 'triple' interface: com.apache.dubbo.sample.basic.IGreeter
下一
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: