java服務框架dubbo(java服務端開發框架)

本文目錄一覽:

硬核!Dubbo分布式服務框架入門教程

Dubbo是阿里開源項目,國內很多互聯網公司都在用,已經經過很多線上考驗。

Dubbo內部使用了 Netty、Zookeeper,保證了高性能高可用性,使用Dubbo可以將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,可用於提高業務復用和靈活擴展,使前端應用能更快速的響應多變的市場需求。

另外,分布式架構可以承受更大規模的並發流量。

Dubbo開始於電商系統,因此在這裡先從電商系統的演變講起。

當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。

缺點:單一的系統架構,使得在開發過程中,佔用的資源越來越多,而且隨着流量的增加越來越難以維護

垂直應用架構解決了單一應用架構所面臨的擴容問題,流量能夠分散到各個子系統當中,且系統的體積可控,一定程度上降低了開發人員之間協同以及維護的成本,提升了開發效率。

缺點:但是在垂直架構中相同邏輯代碼需要不斷地複製,不能復用。

當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心

隨着服務化的進一步發展,服務越來越多,服務之間的調用和依賴關係也越來越複雜,誕生了面向服務的架構體系(SOA),也因此衍生出了一系列相應的技術,如對服務提供、服務調用、連接處理、通信協議、序列化方式、服務發現、服務路由、日誌輸出等行為進行封裝的服務框架。

課程目標:

了解遠程調用PRC的概念,分布式應用為什麼使用RPC, 基於PRC協議的Dubbo的使用。Dubbo框架的特點,框架的組件;基於Dubbo服務提供者,消費者,註冊中心Zookeeper的分布式應用的開發部署, Dubbo的負載均衡實現。微服務的開發. Spring + Dubbo + Zookeeper + Linux

適用人群:

適合有Java基礎,要進入到互聯網行業的開發人員,微服務開發。

動力節點的Dubbo課程以實戰為主講解,從基礎開始手把手式地詳細講解RPC概念,PRC在分布式應用的重要作用。Dubbo分布式服務框架的應用入門基礎。傳統應用到分布式以及微服務的轉變思想。Dubbo協議的特點。Dubbo分布式服務的詳細開發流程、Dubbo服務的實施部署,Zookeeper的服務管理等。

課程目錄:

•001.dubbo視頻教程-dubbo前言

•002.dubbo視頻教程-dubbo概述

•003.dubbo視頻教程-初識dubbo

•004.dubbo視頻教程-dubbo前世今生

•005.dubbo視頻教程-dubbo結構概述-1

•006.dubbo視頻教程-dubbo結構概述-2

•007.dubbo視頻教程-dubbo的使用-直連方式-1

•008.dubbo視頻教程-dubbo的使用-直連方式-2

•009.dubbo視頻教程-dubbo的使用-直連方式-3

•010.dubbo視頻教程-dubbo的使用-直連方式-4

•011.dubbo視頻教程-dubbo服務化最佳實踐-概述

•012.dubbo視頻教程-dubbo服務化最佳實踐-1

•013.dubbo視頻教程-dubbo服務化最佳實踐-2

•014.dubbo視頻教程-dubbo服務化最佳實踐-3

•015.dubbo視頻教程-dubbo服務化最佳實踐-4

•016.dubbo視頻教程-dubbo服務化最佳實踐-5

•017.dubbo視頻教程-註冊中心概述

•018.dubbo視頻教程-windows下安裝及配置zookeeper

•019.dubbo視頻教程-linux下安裝及配置zookeeper

•020.dubbo視頻教程-內容回顧

•021.dubbo視頻教程-dubbo實例-使用註冊中心-1

•022.dubbo視頻教程-dubbo實例-使用註冊中心-2

•023.dubbo視頻教程-dubbo實例-使用註冊中心-3

•024.dubbo視頻教程-dubbo實例-使用註冊中心-4

•025.dubbo視頻教程-dubbo實例-使用註冊中心-5

•026.dubbo視頻教程-dubbo實例使用linux註冊中心

•027.dubbo視頻教程-dubbo實例-版本號version的使用-1

•028.dubbo視頻教程-dubbo實例-版本號version的使用-2

•029.dubbo視頻教程-dubbo實例-版本號version的使用-3

•030.dubbo視頻教程-dubbo實例-版本號version的使用-4

•031.dubbo視頻教程-解決學生問題

•032.dubbo視頻教程-dubbo配置中常見屬性

•033.dubbo視頻教程-dubbo的高穩定性

•034.dubbo視頻教程-監控中心-1

•035.dubbo視頻教程-監控中心-2

Dubbo實戰視頻教程:

Dubbo全套資料下載

Dubbo與Nacos的區別兩者是不是有重疊?

沒有重疊,只是兩者側重點不一樣。Nacos主要功能集中在動態服務發現、服務配置、服務元數據及流量管理。你可以把他簡單的理解為是一個註冊中心和配置中心,而Dubbo是一款高性能、輕量級的開源Java服務框架,主要功能點在於RPC框架。

Dubbo是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的RPC實現服務的輸出和輸入功能,可以和Spring框架無縫集成。

Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力,面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。

註冊中心負責服務地址的註冊與查找,相當於目錄服務,服務提供者和消費者只在啟動時與註冊中心交互,註冊中心不轉發請求,壓力較小。

監控中心負責統計各服務調用次數,調用時間等,統計先在內存匯總後每分鐘一次發送到監控中心服務器,並以報表展示。服務提供者向註冊中心註冊其提供的服務,並彙報調用時間到監控中心,此時間不包含網絡開銷。

從零開始認識Dubbo

[TOC]

1.Dubbo是什麼

Apache Dubbo 是一款高性能Java RPC框架。

Dubbo是一個分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務框架的需求,並且本質上是個服務調用的東東, 說白了就是個遠程服務調用的分布式框架(告別Web Service模式中的WSdl,以服務者與消費者的方式在dubbo上註冊) 其核心部分包含:

2.Dubbo能做什麼

Dubbo採用全spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行加載。

3.Dubbo架構

節點角色說明:

Provider: 暴露服務的服務提供方。

Consumer: 調用遠程服務的服務消費方。

Registry: 服務註冊與發現的註冊中心。

Monitor: 統計服務的調用次調和調用時間的監控中心。

Container: 服務運行容器。

調用關係說明:

4.Dubbo的使用方法

Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行加載。如果不想使用Spring配置,可以通過API的方式進行調用(註解式,不推薦使用)

下載安裝zookeeper註冊中心(不建議使用multicast)

1.Windows

下載地址:

使用方法:下載解壓即可,進入解壓目錄運行zkServer.cmd啟動註冊服務中心

截圖:

2.MacOS

下載地址:

使用方法:下載解壓即可,進入解壓目錄運行zkServer.sh start啟動註冊服務中心

3.Linux

下載地址:

使用方法:下載解壓即可,進入解壓目錄運行zkServer.sh start啟動註冊服務中心

服務提供者

1.定義服務接口(該接口需單獨打包,在服務提供方和消費方共享)

DemoService.java

2.服務提供方實現接口:(對服務消費方隱藏實現)

DemoServiceImpl.java

dubbo-provider.xml:

4.加載Spring配置,啟動服務:

Provider.java:

或者使用springBoot啟動

服務消費者:

applicationContext-dubbo.xml 中註冊自己需要調用的接口。

1.通過Spring配置引用遠程服務

dubbo-consumer.xml:

2.加載Spring配置,並調用遠程服務:

Consumer.java

或者使用springBoot啟動

並添加對應的restful接口提供接口訪問

修改對應index頁面

3.dubbo管理頁面:

啟動後訪問

輸入賬號密碼root/root

應用頁面:

提供者頁面:

消費者頁面:

服務頁面:

測試是否成功,只要看狀態是否正常,就ok了 ….

provider-log:

5.使用Dubbo可能遇到的問題

1、org.springframework.beans.factory.BeanCreationException

原因分析:

解決方案

2、org.apache.dubbo.rpc.RpcException

原因分析

解決方案

可能是因為providers沒有啟動,或者是provider對應暴露的服務被禁用,啟動providers或者解除禁用即可

3、java.lang.IllegalStateException

原因分析

解決方案

總結以上兩點,通俗點講,就是重啟了工程(可能是因為直接修改代碼,工程reload了), 並且,連過了數據庫(登錄等),才出現了上述報錯信息。原因是因為在tomcat重啟的時候,之前的tomcat的線程還沒有完全關閉,最新啟動tomcat就會報這個異常。

4、org.apache.dubbo.remoting.TimeoutException

原因分析

解決方案

在dubbo-provider.xml增加超時時間

說一下Dubbo的工作原理?註冊中心掛了可以繼續通信嗎?

答案是肯定可以的,我將從下面幾點進行說明:

1.dubbo 的調用流程

2.Dubbo整體設計

3.從源碼上說明註冊中心掛了還是可以繼續通信的

Dubbo 調用流程

架構圖

流程說明:

1.Provider(提供者)綁定指定端口並啟動服務

2.提供者連接註冊中心,並發本機IP、端口、應用信息和提供服務信息發送至註冊中心存儲

3.Consumer(消費者),連接註冊中心 ,並發送應用信息、所求服務信息至註冊中心

4.註冊中心根據 消費 者所求服務信息匹配對應的提供者列表發送至Consumer 應用緩存。

5.Consumer 在發起遠程調用時基於緩存的消費者列表擇其一發起調用。

6.Provider 狀態變更會實時通知註冊中心、在由註冊中心實時推送至Consumer

這麼設計的意義:

Dubbo 整體設計

其協作流程如下:

從源碼上說明註冊中心掛了還是可以繼續通信的

首先要把消費者註冊到Zookeeper註冊中心

然後使用RegistryDirectory 監聽一下幾個目錄(會自動觸發一次去獲取這些目錄上的當前數據)

當前所引入的服務的動態配置目錄:/dubbo/config/dubbo/org.apache.dubbo.demo.DemoService:1.1.1:g1.configurators

比如監控providers 目錄:

當有服務提供者註冊,zookeeper會自動推動給訂閱的消費者,然後轉換為invoker存儲到緩存中

我們在看調用時的代碼:

我們看到 FailoverClusterInvoker 的doInvoke方法

Invoker invoker = select(loadbalance, invocation, copyInvokers, invoked);

此方法根據負載均衡器去緩存中獲取一個invoker,

上面的 copyInvokers 就是上面我們緩存進去的 List

invokers = routerChain.route(getConsumerUrl(), invocation);

總結

在我們系統啟動時,已經緩存了註冊中心上的所有服務,後續的註冊中心掛了只會影響到後續則註冊,不會影響調用!

Dubbo分布式的RPC,微服務框架,

包括三個關鍵功能:基於接口的遠程調用,容錯與負載均衡,服務自動註冊與發現。

Dubbo使得調用遠程服務就像調用本地java服務一樣簡單。

參考Dubbo官方文檔:包括實現細節,遠程調用細節,服務提供者暴露服務。

主要流程。

1、provider向註冊中心去註冊

2、consumer從註冊中心訂閱服務,註冊中心會通知consumer註冊好的服務

3、consumer調用provider

4、consumer和provider都異步的通知監控中心

基於zk作為註冊中心:

【提供者】在【啟動】時,向註冊中心zk 【註冊】自己提供的服務。

【消費者】在【啟動】時,向註冊中心zk 【訂閱】自己所需的服務。

所以是可以的,消費者在啟動時,消費者會從zk拉取註冊的生產者的地址接口等數據,緩存在本地。每次調用時,按照本地存儲的地址進行調用,消費者本地有一個生產者的列表,他會按照列表繼續工作,倒是無法從註冊中心去同步最新的服務列表,短期的註冊中心掛掉是不要緊的,但一定要儘快修復,掛掉是不要緊的,但前提是你沒有增加新的服務,如果你要調用新的服務,則是不能辦到的

dubbo和spring cloud區別是什麼?

dubbo和spring cloud區別是:

1、初始定位不同: SpringCloud定位為微服務架構下的一站式解決方案;Dubbo 是 SOA 時代的產物,它的關注點主要在於服務的調用和治理。

2、生態環境不同: SpringCloud依託於Spring平台,具備更加完善的生態體系;而Dubbo一開始只是做RPC遠程調用,生態相對匱乏,現在逐漸豐富起來。

3、調用方式: SpringCloud是採用Http協議做遠程調用,接口一般是Rest風格,比較靈活;Dubbo是採用Dubbo協議,接口一般是Java的Service接口,格式固定。但調用時採用Netty的NIO方式,性能較好。

4、組件差異比較多,例如SpringCloud註冊中心一般用Eureka,而Dubbo用的Zookeeper,SpringCloud生態豐富,功能完善,更像是品牌機,Dubbo則相對靈活,可定製性強,更像是組裝機。

5、SpringCloud:Spring公司開源的微服務框架,SpirngCloud 定位為微服務架構下的一站式解決方案。

6、Dubbo:阿里巴巴開源的RPC框架,Dubbo 是 SOA 時代的產物,它的關注點主要在於服務的調用,流量分發、流量監控和熔斷。

兩者的生態對比:

1、Spring Cloud 的功能很明顯比 Dubbo 更加強大,涵蓋面更廣,而且作為 Spring 的旗艦項目,它也能夠與 Spring Framework、Spring Boot、Spring Data、Spring Batch 等其他 Spring 項目完美融合,這些對於微服務而言是至關重要的。

2、使用 Dubbo 構建的微服務架構就像組裝電腦,各環節選擇自由度很高,但是最終結果很有可能因為一條內存質量不行就點不亮了,總是讓人不怎麼放心。

3、而 Spring Cloud 就像品牌機,在 Spring Source 的整合下,做了大量的兼容性測試,保證了機器擁有更高的穩定性,但是如果要在使用非原裝組件外的東西,就需要對其基礎原理有足夠的了解。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243526.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:56
下一篇 2024-12-12 12:56

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論