柚子快報(bào)激活碼778899分享:分布式 Dubbo簡(jiǎn)介和配置
柚子快報(bào)激活碼778899分享:分布式 Dubbo簡(jiǎn)介和配置
該文章已同步收錄到我的博客網(wǎng)站,歡迎瀏覽我的博客網(wǎng)站,xhang’s blog
1.Dubbo和OpenFeign的簡(jiǎn)介
Dubbo一個(gè)高性能rpc框架,用于構(gòu)建分布式微服務(wù)架構(gòu),它提供了服務(wù)注冊(cè)與發(fā)現(xiàn),負(fù)載均衡,容錯(cuò)機(jī)制等功能。Dubbo具有高性能和低延遲的特點(diǎn),適合于大規(guī)模的分布式系統(tǒng)。OpenFeign一個(gè)基于Java的聲明式HTTP客戶端框架,它簡(jiǎn)化了編寫(xiě)遠(yuǎn)程調(diào)用代碼的過(guò)程。OpenFeign允許開(kāi)發(fā)人員通過(guò)編寫(xiě)接口的方式定義對(duì)遠(yuǎn)程服務(wù)的訪問(wèn),然后通過(guò)注解來(lái)配置請(qǐng)求參數(shù)、路徑等信息。OpenFeign會(huì)根據(jù)接口的定義自動(dòng)生成具體的實(shí)現(xiàn)代碼。它還提供了負(fù)載均衡、錯(cuò)誤處理等功能,可以與Spring Cloud等微服務(wù)框架無(wú)縫集成。
2.Dubbo和OpenFeign的區(qū)別
協(xié)議支持:Dubbo支持多種協(xié)議,包括Dubbo協(xié)議、HTTP協(xié)議、RMI等。OpenFeign主要使用HTTP協(xié)議進(jìn)行通信。使用方式:Dubbo更加底層,需要顯式定義接口和實(shí)現(xiàn)類(lèi),并配置各種參數(shù)。OpenFeign則更加注重于聲明式的編程模型,通過(guò)定義接口和注解來(lái)實(shí)現(xiàn)遠(yuǎn)程調(diào)用,減少了手動(dòng)編寫(xiě)具體實(shí)現(xiàn)的工作。生態(tài)系統(tǒng):Dubbo是一個(gè)獨(dú)立的RPC框架,它提供了完整的分布式服務(wù)治理的解決方案。OpenFeign則是Spring Cloud生態(tài)系統(tǒng)中的一部分,與其他Spring Cloud組件(如Eureka、Ribbon、Hystrix等)緊密集成,提供了更全面的微服務(wù)開(kāi)發(fā)解決方案。功能特性:Dubbo提供了更多的功能特性,如負(fù)載均衡、容錯(cuò)機(jī)制、服務(wù)注冊(cè)與發(fā)現(xiàn)等,適合于大規(guī)模的分布式系統(tǒng)。OpenFeign則更加關(guān)注于RESTful風(fēng)格的接口調(diào)用,適用于構(gòu)建輕量級(jí)的微服務(wù)。
3.SpringCloud集成Dubbo
添加pom
服務(wù)端和消費(fèi)端配置
dubbo:
application:
name: vector-member # 與服務(wù)名一致即可
logger: slf4j
# 元數(shù)據(jù)中心 local 本地 remote 遠(yuǎn)程 這里使用遠(yuǎn)程便于其他服務(wù)獲取
# 注意 這里不能使用 本地 local 會(huì)讀取不到元數(shù)據(jù)
metadataType: remote
protocol:
# 設(shè)置為 tri 即可使用 Triple 3.0 新協(xié)議
# 性能對(duì)比 dubbo 協(xié)議并沒(méi)有提升 但基于 http2 用于多語(yǔ)言異構(gòu)等 http 交互場(chǎng)景
# 使用 dubbo 協(xié)議通信
name: dubbo
# dubbo 協(xié)議端口(-1表示自增端口,從20880開(kāi)始)
port: -1
serialization: hessian2
registry:
address: nacos://localhost:8848?username=nacos&password=nacos
check: false
metadata-report:
address: nacos://localhost:8848?username=nacos&password=nacos
provider:
version: 1.0.0
consumer:
version: 1.0.0
# 禁止消費(fèi)者啟動(dòng)時(shí)檢查提供者是否可用
check: false
公共模塊聲明遠(yuǎn)程調(diào)用接口
服務(wù)提供者實(shí)現(xiàn)接口編寫(xiě)服務(wù)業(yè)務(wù)
服務(wù)消費(fèi)者使用@DubboReference注入接口,調(diào)用服務(wù)方法。
4.踩坑記錄
未發(fā)現(xiàn)提供者
No provider available for the service.dubbo xxxxxxxx
解決方法: 如下圖dubbo在啟動(dòng)時(shí)會(huì)默認(rèn)檢測(cè)@DubboReference標(biāo)注的提供端服務(wù)是否可用,不可用則拋出No provider available for the service.dubbo xxxxxxxx. 因此我們只要在consumer禁用檢查即可.
這也是兩個(gè)業(yè)務(wù)模塊互相調(diào)用的配置項(xiàng)。
類(lèi)型轉(zhuǎn)化異常
java.lang.ClassCastException: class java.util.HashMap cannot be cast to class com.vector.score.vo.ArtistVO (java.util.HashMap is in module java.base of loader ‘bootstrap’; com.vector.score.vo.ArtistVO is in unnamed module of loader ‘a(chǎn)pp’)
這個(gè)原因可能是配置了允許序列化泛化調(diào)用配置引起的.
序列化報(bào)錯(cuò)
This serialization only supports google protobuf objects, current object class is: java.lang.Long
可以通過(guò)debug 觀察遠(yuǎn)程調(diào)用結(jié)果了解. 該錯(cuò)誤是強(qiáng)制類(lèi)型轉(zhuǎn)化錯(cuò)誤. dubbo默認(rèn)hession2序列化.基本類(lèi)型不變.但對(duì)象傳輸會(huì)變?yōu)閗-v形式.應(yīng)該轉(zhuǎn)為map.
倘若使用protobuf 也是不支持對(duì)象傳輸.需要轉(zhuǎn)為map并引入
柚子快報(bào)激活碼778899分享:分布式 Dubbo簡(jiǎn)介和配置
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。