很多朋友對于dubbo與springcloud的區(qū)別和dubbo springboot不太懂,今天就由小編來為大家分享,希望可以幫助到大家,下面一起來看看吧!
dubbo spring cloud作用
DubboSpringCloud是SpringCloudAlibaba項目內(nèi)部提供的一個可以使用SpringCloud客戶端RestTemplate或OpenFeign調(diào)用Dubbo服務(wù)的模塊。
ApacheDubbo和SpringCloud是兩套架構(gòu)完全不同的開發(fā)框架。DubboSpringCloud定義了DubboMetadataService元數(shù)據(jù)服務(wù)的概念。這是一個專門用于存儲Dubbo服務(wù)的元數(shù)據(jù)接口。
Dubbo框架的開發(fā)流程是怎么樣的
Dubbo架構(gòu)介紹
Dubbo經(jīng)常會和SpringCloud微服務(wù)架構(gòu)作比較,但實際上兩者側(cè)重的領(lǐng)域是有很大不同的。Dubbo側(cè)重于服務(wù)治理即服務(wù)的注冊更新、管理服務(wù)的生命周期、定制服務(wù)的遵從規(guī)則,確保服務(wù)一致性、服務(wù)監(jiān)控等、服務(wù)的調(diào)用等。而SpringCloud則側(cè)重于整個微服務(wù)生態(tài),除了服務(wù)治理以外對服務(wù)網(wǎng)關(guān)、分布式配置、服務(wù)跟蹤、消息總線、數(shù)據(jù)流、批量任務(wù)等都有很好的技術(shù)規(guī)范實現(xiàn)??梢钥闯鰜鞤ubbo可以作為SpringCloud生態(tài)的一部分和SpringCloud整合在一起提供服務(wù)治理方面的支持。雖然功能沒有SpringCloud整個生態(tài)完善,但是就服務(wù)治理來講,Dubbo有著諸多優(yōu)勢:
1.支持更多協(xié)議,如:rmi、hessian、http、webservice等。
2.效率更高,因為訪問方式的不同Dubbo能有更好的表現(xiàn)。
3.服務(wù)治理提供粒度更小的管理。
Dubbo核心功能:
1.遠(yuǎn)程通訊,提供對多種基于長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應(yīng)”模式的信息交換方式。
2.集群容錯,提供基于接口方法的透明遠(yuǎn)程過程調(diào)用,包括多協(xié)議支持,以及軟負(fù)載均衡,失敗容錯,地址路由,動態(tài)配置等集群支持。
3.自動發(fā)現(xiàn),基于注冊中心目錄服務(wù),使服務(wù)消費方能動態(tài)的查找服務(wù)提供方,使地址透明,使服務(wù)提供方可以平滑增加或減少機器。
Dubbo架構(gòu)如下圖所示:
由上圖可知Dubbo的服務(wù)調(diào)用流程如下:
1.服務(wù)提供者將自己發(fā)布注冊到服務(wù)注冊中心暴露服務(wù)
2.服務(wù)消費者從服務(wù)注冊中心訂閱服務(wù)
3.服務(wù)消費者根據(jù)注冊中心獲取的服務(wù)進(jìn)行進(jìn)行遠(yuǎn)程調(diào)用
Dubbo本地開發(fā)環(huán)境搭建
Duoobo服務(wù)注冊注冊中心的搭建,我們將使用Zookeeper作為實際注冊中心進(jìn)行操作演練。
Dubbo項目的搭建
使用eclipse新建一個服務(wù)提供者的maven項目。這里新建一個項目名為:dubbo-provider用來提供根據(jù)用戶名來返回用戶信息的簡單實例:
1.首先將Dubbo和Zookeeper的依賴架包進(jìn)行引入。
新建服務(wù)提供接口和具體實現(xiàn)類,在eclipse下創(chuàng)建名為:dubbo-provider的maven項目。
1.創(chuàng)建用戶信息查詢服務(wù)接口QueryUserInfoService提供一個根據(jù)用戶名返回用戶信息的接口getUserInfo(Stringname)。
2.創(chuàng)建具體的實現(xiàn)類QueryUserInfoServiceImpl,實現(xiàn)根據(jù)用戶名返回一個用戶信息的字符串。
3.在resources文件夾下創(chuàng)建applicationProvider.xml配置服務(wù)類的相關(guān)信息,用來注冊和暴露服務(wù)。
4.創(chuàng)建服務(wù)注冊類:ServerMain讀取配置文件,注冊配置文件中的服務(wù),配置完成后啟動該類即可完成服務(wù)的注冊。
配置監(jiān)控中心。如果我們需要對自己的服務(wù)進(jìn)行監(jiān)控和查看需要安裝Monitor服務(wù)。1.在Github上下載dubbo-admin項目后修改目錄下的dubbo.properties文件:
1)配置zk地址:
dubbo.registry.address=zookeeper://127.0.0.1:2181
2)配置登錄用戶root密碼:
dubbo.admin.root.password=roo
2.構(gòu)建項目,在dubbo-admin目錄下
使用maven命令打包:mvncleanpackage
3.運行dubbo-admin項目可以用以下兩種方式:
1)mvn--projectsdubbo-admin-serverspring-boot:run
2)cddubbo-admin-distribution/targe;java-jardubbo-admin-0.1.jar
4.運行成功后即可通過默認(rèn)的127.0.0.1:8080訪問監(jiān)控后臺頁面
新建服務(wù)消費者項目實現(xiàn)對服務(wù)提供者進(jìn)行服務(wù)消費,在eclipse下創(chuàng)建名為:dubbo-customer的maven項目。
1.引入或創(chuàng)建服務(wù)接口QueryUserInfoService類
2.在resources文件夾下創(chuàng)建applicationContext.xml配置注冊中心信息,用來獲取服務(wù)信息。
3.創(chuàng)建一個消費測試類QueryUserInfoService調(diào)用服務(wù)。
dubbo與springcloud都要學(xué)嗎
軟件的學(xué)習(xí),是根據(jù)使用需要,但是有機會還是都學(xué)了比較好,藝多不壓身。
誰能全面地說一下Dubbo和Spring Cloud什么區(qū)別
還是了解下微服務(wù)和分布式開發(fā)過程中會產(chǎn)生什么問題,總的來說就是服務(wù)器間通信,服務(wù)器的管理,服務(wù)不可用降級,事物等等一堆問題要解決,dubbo是遠(yuǎn)程調(diào)用工具,只解決了分布式服務(wù)器之間的通信問題,用zookepper又能解決分布式服務(wù)的一些其他問題,但還有一系列等等麻煩的分布式開發(fā)難點,需要自己解決。dubbo交給了Apache,相信將來不久應(yīng)該會有一整套分布式解決方案。springcloud是一整套的微服務(wù)解決方案,跟springboot一樣,是一個約束,規(guī)定了微服務(wù)開發(fā)中問題的解決接口,組件化解決方案,優(yōu)化升級簡易方便,可以由第三方通過實現(xiàn)接口自己實現(xiàn)想要的功能,現(xiàn)在也有許多優(yōu)秀的開源組建,開箱即用,簡單方便,而且換個依賴不用改代碼就能使用其他springcloud組建,總的來說springboot使開發(fā)快速,springcloud使微服務(wù)簡單。
微服務(wù)框架spring cloud和dubbo有什么區(qū)別
首先,從嚴(yán)格意義上來說,Dubbo和SpringCloud的定位是不一樣的。Dubbo是一個高性能的、基于java的開源RPC框架,注意它的定位是是高性能和RPC框架。SpringCloud提供了一系列通用工具來幫助開發(fā)者在分布式系統(tǒng)里快速構(gòu)建一些常見模式,比如分布式配置管理、服務(wù)發(fā)現(xiàn)、熔斷降級、智能路由、微代理、控制總線、一次性令牌、全局鎖、分布式選主、分布式session等一些列解決方案,它的設(shè)計目標(biāo)是提供一整套服務(wù)治理能力,它具有一套完整的微服務(wù)解決方案體系。
dubbo只是一個分布式的RPC框架,如果一定要按照分布式系統(tǒng)架構(gòu)里的功能來定義的話,只是解決了服務(wù)發(fā)現(xiàn)、服務(wù)路由、服務(wù)降級和負(fù)載均衡方面的能力,新版本里也提供了動態(tài)配置中心和服務(wù)治理相關(guān)的能力,但相比SpringCloud而言,還是差了相當(dāng)一部分的能力。
從功能支持上來說,dubbo的角色定位可能更像是另外一個大名鼎鼎的框架,那就是gRPC,而且兩者在使用的方式以及工作原理上都非常相似,都是基于序列化協(xié)議來解決分布式系統(tǒng)中的遠(yuǎn)程調(diào)用問題,在使用上可以通過約定接口或者通過proto文件生成代碼文件來“提升用戶的使用”。
如果你在系統(tǒng)設(shè)計之初就已經(jīng)考慮到了后續(xù)可能會涉及到各種服務(wù)治理能力,比如分布式配置、全局鎖、分布式session等常見需求,那么使用SpringCloud將會減少你很多的工作,因為這些基本上都是"套件",相互配合使用會非常順暢。如果你想要的只是解決分布式架構(gòu)后的遠(yuǎn)程調(diào)用問題,那么Dubbo是一個不錯的選擇。
SpringCloud和Dubbo的基本差異大概就是如上所述,如果你不知道該如何做選擇,這里再補充幾個比較關(guān)鍵的差異點,希望能幫助你更好的結(jié)合自身業(yè)務(wù)做出選擇:
能力支持方面
上文也提到,SpringCloud提供了一整套微服務(wù)治理的功能組件,很多組件基本上都是"開箱即用"的,并且相互之間能很好的兼容,舉個例子,如果要在SpringCloud里實現(xiàn)服務(wù)發(fā)現(xiàn)、負(fù)載均衡和熔斷降級,你只需要引用SpringCloud的依賴組件即可,直接通過注解便可使用,基本上零配置;而dubbo框架,除了上述提到的能力支持之外,如果想要使用熔斷降級,那你可能需要額外引用hystrix或者resilience4j來實現(xiàn);溫馨提示,hystrix官方目前也已經(jīng)宣布不再更新,并且推薦使用resilience4j。
協(xié)議兼容方面
SpringCloud里并沒有限制服務(wù)之間的通信協(xié)議,但是主流的一些客戶端比如restTemple、feign等都是直接支持使用Ribbon來做服務(wù)注冊發(fā)現(xiàn)和智能路由的,其底層通信的協(xié)議都是HTTP;而dubbo框架缺省是基于NIO異步傳輸使用TCP長連接并采用Hessian二進(jìn)制序列化方式通信的;
這會涉及后續(xù)系統(tǒng)在擴展上的兼容性問題,比如需要調(diào)用一個三方系統(tǒng)或者是被第三方系統(tǒng)調(diào)用,相比而言HTTP協(xié)議可能更加通用。
模型定義方面
dubbo在模型設(shè)計上將一個接口定義為一個服務(wù),而SpringCloud里則是將一個應(yīng)用定義為一個服務(wù),這兩者在模型上是存在很大差異的,你也許會奇怪,這個對使用會有影響嗎?從現(xiàn)有使用方面來說是沒有什么影響的,但是你如果有關(guān)注ServiceMesh最新微服務(wù)技術(shù)的話,目前對Dubbo協(xié)議這塊可能支持暫時還不完善,其中很大一部分原因就是因為在服務(wù)模型上與K8S的服務(wù)模型有差異;
調(diào)用性能方面
如果分布式系統(tǒng)中比較關(guān)注遠(yuǎn)程調(diào)用的性能,那Dubbo可能是一個較好的選擇,基于NIO和TCP長連接的通信傳輸方式,在性能上相比HTTP協(xié)議是有絕對優(yōu)勢的;當(dāng)然基于SpringCloud你也可以使用gRPC協(xié)議來解決性能問題,那就是另外一個問題了。
好了,文章到這里就結(jié)束啦,如果本次分享的dubbo與springcloud的區(qū)別和dubbo springboot問題對您有所幫助,還望關(guān)注下本站哦!