導航:首頁 > 文件管理 > dubbo服務提供者的配置文件

dubbo服務提供者的配置文件

發布時間:2025-07-15 02:09:47

⑴ Dubbo配置參數詳解-generic

畫外音:目前Dubbo在開源中國舉辦的2019年度最受歡迎中國開源軟體中排名第3名,支持Dubbo的朋友可以去投票哇。 2019年度最受歡迎中國開源軟體

Consumer端正常調用Dubbo服務時,一般都需要服務提供方提供一個jar包,只有在項目中引入該jar包,才能調用相關服務;能不能向http調用那樣,我只需手顫要知道我要調用的url就可以直接調用Dubbo服務?

有的,這就是generic做的事。

generic :通用服務調用,當我們已經知道我們要調用的服務的全限定鬧薯磨名及方法,就不需要服務提供者的jar就能調用Dubbo服務了。

generic要配合interfaceName參數一起使用,其中interfaceName是Dubbo服務的全限定名,比如:

當provider接收到請求時,會調用一系列的過濾器對請求進行處理,這其中就包含處理generic的過濾器: GenericFilter
該過濾器會判斷液斗調用的方法是否是$invoke,如果是則會通過反射調用正在的方法

筆者認為該參數最大的用武之地是作為網關使用,筆者所在公司的網關就提供了http轉換成bbo介面調用的功能,前端使用http調用,後端使用bbo服務進行處理;網關提供一個介面配置頁面,只需要業務方在頁面配置url與bbo介面的轉換關系即可,網關不需要引用服務提供者的jar包,如果介面有變動,網關無需知道,只要業務方修改配置即可。

⑵ Dubbo簡介

Dubbo是Alibaba開源的分布式服務框架,它按照分層的方式來架構,使用這種方式可以使各層解耦。

Dubbo在調用遠程的服務的時候再本地有一個介面,就想調用本地方法一樣去調用,底層實現好參數傳輸和遠程服務運行結果傳回之後的返回。

Dubbo的特點:

(1)它主要使用高效的網路框架和序列化框架,讓分布式服務之間調用效率更高。

(2)採用注冊中心管理眾多的服務介面地址,當你想調用服務的時候只需要跟注冊中心詢問即可,不像使用WebService一樣每個服務都得記錄好介面調用方式。

(3)監控中心時實現服務方和調用方之間運行狀態的監控,還能控制服務的優先順序、許可權、權重、上下線等,讓整個龐大的分布式服務系統的維護和治理比較方便。

(4)高可用,如果有服務掛了,注冊中心就會從服務列表去掉該節點,客戶端會像注冊中心請求另一台可用的服務節點重新調用。同時注冊中心也能實現高可用(ZooKeeper)。

(5)負載均衡,採用軟負載均衡演算法實現對多個相同服務的節點的請求負載均衡。

Dubbo需要四大基本組件:Rigistry,Monitor,Provider,Consumer。

1、監控中心的配置文件-bbo.properties文件

(1)容器,監控中心是在jetty和spring環境下運行,依賴於注冊中心,日誌系統是log4j

    bbo.container = log4j,spring,registry,jetty

(2)監控服務的名稱,監控系統對整個Dubbo服務系統來說也是一個服務

    bbo.application.name = simple-monitor

(3)服務的所有者,這是Dubbbo的服務的功能,可以指定服務的負責人

    bbo.application.owner = coselding

(4)注冊中心的地址,配置後監控中心就能通過注冊中心獲取當前可用的服務列表及其狀態,在頁面向你匯報Dubbo中的服務運行情況。

    bbo.registr.address = multicast://{ip}:{port} //廣播

    bbo.registr.address = zookeeper://{ip}:{port} //zookeper

    bbo.registr.address = redis://{ip}:{port} //redis

    bbo.registr.address = bbo://{ip}:{port} //bbo

(5)bbo協議埠號

    bbo.protocol.port = 7070

(6)jetty工作埠號

    bbo.jetty.port = 8082

(7)工作目錄,用於存放監控中心的數據

    bbo.jetty.directory = ${user.home}/monitor

(8)監控中心報表存放目錄

    bbo.charts.directory=${bbo.jetty.directory}/charts

(9)監控中心數據資料目錄

    bbo.statistics.directory=${user.home}/monitor/statistics

(10)監控中心日誌文件路徑

    bbo.log4j.file=logs/bbo-monitor-simple.log

(11)監控中心日誌記錄級別

    bbo.log4j.level=WARN

2、Dubbo提供負載均衡方式

(1)Random,隨機,按權重配置隨機概率,調用量越大分布越均勻,默認方式。

(2)RounRobin,輪詢,按權重設置輪詢比例,如果存在比較慢的機器容易在這台機器上請求阻塞較多。

(3)LeastActive,最少活躍調用數,不支持權重,只能根據自動識別的活躍數分配,不能靈活調配。

(4)ConsistenHash,一致性hash,對相同參數的請求路由到一個服務提供者上,如果有類似灰度發布需求可採用。

3、Dubbo過濾器

Dubbo初始化過程載入ClassPath下的META-INF/bbo/internal/,META-INF/bbo/,META-INF/services/三個路徑下的com.alibaba.bbo.rpc.Filter文件。文件內容:

    Name = FullClassName,這些類必須實現Filter介面。

自定義Filter類:

配置文件在配置過濾器,consumer.xml中:

Dubbo對過濾器的載入過程:

    先載入三個路徑下的com.alibaba.bbo.rpc.Filter文件裡面的鍵值對,key為過濾器名稱,value為過濾器的類的全限定名(這個類必須實現Dubbo中的Filter介面)。

    自定義的類中@Active註解是過濾器設定的全局基本屬性。

    Spring在載入consumer.xml文件時,通過 <bbo:consumer filter="xxx" id = "xxx" retrries = "0">這個配置指定消費者端要載入的過濾器,通過filter屬性指定過濾器名稱。

@Activate註解-自動激活,group屬性是表示匹配了對應的角色才被載入,value表示表明過濾條件,不寫則表示所有條件都會被載入,寫了則只有bbo URL中包含該參數名且參數值不為空才被載入,這個參數會以bbo協議的一個參數K-V對傳到Provider。

4、Dubbo的Provider配置

5、Dubbo的Consumer配置

1、Dubbo是什麼?

Dubbo是阿里巴巴開源的基於Java的高性能RPC分布式框架。

2、為什麼使用Dubbo?

很多公司都在使用,經過很多線上的考驗,內部使用了Netty,Zookeeper,保證了高性能可用性。

使用Dubbo可以將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,可以提高業務復用靈活性擴展,使前端應用能快速的響應對邊的市場需求。分布式架構可以承受更大規模的並發流量。

Dubbo的服務治理圖:

3、Dubbo和Spring Cloud的區別

兩個沒有關聯,但是非要說區別,有如下幾點:

(1)通信方式不同,Dubbo使用RPC通信,Spring Cloud使用HTTP Restful方式

(2)組成部分不同

4、Dubbo支持的協議

bbo://  (推薦);rmi:// ;hessian:// ;http:// ;webservice:// ;thrift:// ;memcached:// ;redis:// ;rest:// 。

5、Dubbo需要容器嗎?

不需要,如果硬要容器的話,會增加復雜性,同時也浪費資源。

6、Dubbo內置的服務容器

Spring Container;Jetty Container;Log4j Container。

7、Dubbo中節點角色

Register,Monitor,Provider,Consumer,Container(服務運行的容器)。

8、Dubbo的服務注冊和發現的流程圖

9、Dubbo的注冊中心

默認使用Zookeper作為注冊中心,還有Redis,Multicast,bbo注冊中心。

10、Dubbo的配置方式

Spring配置方式和Java API配置方式

11、Dubbo的核心配置

(1)bbo:service 服務配置

(2)bbo:referece 引用配置

(3)bbo:protocol 協議配置

(4)bbo:application 應用配置

(5)bbo:registry 注冊中心配置

(6)bbo:monitor 監控中心配置

(7)bbo:provider 提供方配置

(8)bbo:consumer 消費方配置

(9)bbo:method 方法配置

(10)bbo:argument 參數配置

12、在Provider 節點上可以配置Consumer端的屬性有哪些?

(1)timeout:方法調用超時

(2)retries:失敗重試次數,默認是2次

(3)loadbalance:負載均衡演算法,默認隨機

(4)actives消費者端,最大並發調用控制

13、Dubbo啟動時如果依賴的服務不可用會怎樣

Dubbo預設會在啟動時檢查依賴的服務是否可用,不可用時會拋出異常,阻止Spring初始化完成。默認check ="true"。

14、Dubbo序列化框架

推薦使用Hessian序列化,還有Dubbo,FastJson,Java自帶序列化。

15、Dubbo的通信框架

默認使用Netty框架,另外也提供了Mina,Grizzly。

16、Dubbo集群容錯方案

(1)Failover Cluster,失敗自動切換,自動重試其他伺服器。

(2)Failfast Cluster,快速失敗,立即報錯,只發起一次調用。

(3)Failsafe Cluster,失敗安全,出現異常時,直接忽略。

(4)Failback Cluster,失敗自動恢復,記錄失敗請求,定時重發。

(5)Forking Cluster,並行調用多個伺服器,只要一個返回成功即可。

(6)Broadcast Cluster,廣播逐個調用所有提供者,任意一個報錯則報錯。

17、Dubbo的負載均衡策略

(1)Random LoadBalance,隨機,按權重設置隨機概率,默認。

(2)RoundRobin LoadBalace,輪詢,按公約後的權重設置輪訓比例。

(3)LeastActive LoadBalace,最少活躍調用數,相同活躍數的隨機。

(4)ConsistenHash LoadBalance,一致性hash,相同參數的請求總是發到用一個伺服器。

18、指定某一個服務

可以配置環境點對點直連,繞過注冊中心,將以服務介面為單位,忽略注冊中心的提供者列表。

<bbo:reference interface="com.weidian.bbo.IMyDemo" version="1.0" id="myDemo" url="bbo://127.0.0.1:20880/"></bbo:reference>

19、Dubbo多協議

Dubbo允許配置多協議,在不同伺服器上支持不同協議,或者同一服務支持多種協議。

20、當一個服務有多種實現時怎麼做?

當一個介面有多種是現實,可以用group屬性來分組,服務提供方和消費方都指定同一個group即可。

21、兼容舊版本

使用版本號過度,多個不同版本的服務注冊到注冊中心,版本號不同的服務相互間不引用。

22、Dubbo可以緩存嗎?

Dubbo提供聲明式緩存,用於加速熱門數據的訪問速度,以減少用戶加緩存的工作量。

23、Dubbo服務之間的調用時阻塞的嗎?

默認是同步等待結果阻塞的,支持非同步調用。Dubbo是基於NIO的非阻塞實現並行調用的,客戶端不需要啟動多線程即可完成並行調用多個遠程服務,相對多線程開銷較小,非同步調用會返回一個Future對象。

24、Dubbo不支持分布式事務

25、Dubbo必須依賴的包

Dubbo必須依賴JDK,其他為可選。

26、Dubbo使用過程中的問題

Dubbo的設計目的是為了滿足高並發小數據量的rpc請求,在大數據量下性能表現不是很好,建議使用rmi或http協議。

27、Dubbo的管理控制台的作用

路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡。

28、Spring boot整合Dubbo

(1)添加依賴

        <!-- https://mvnrepository.com/artifact/com.alibaba.boot/bbo-spring-boot-project -->

        <dependency>

            <groupId>com.alibaba.boot</groupId>

            <artifactId>bbo-spring-boot-starter</artifactId>

            <version>0.1.0</version>

        </dependency>

        <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->

        <dependency>

            <groupId>com.101tec</groupId>

            <artifactId>zkclient</artifactId>

            <version>0.10</version>

        </dependency>

(2)配置bbo

    ## Dubbo 服務提供者配置

    spring.bbo.application.name=provider

    spring.bbo.registry.address=zookeeper://127.0.0.1:2181

    spring.bbo.protocol.name=bbo

    spring.bbo.protocol.port=20880

    spring.bbo.scan=org.spring.springboot.bbo

    ## Dubbo 服務消費者配置

    spring.bbo.application.name=consumer

    spring.bbo.registry.address=zookeeper://127.0.0.1:2181

    spring.bbo.scan=org.spring.springboot.bbo

⑶ 如何更好地學習bbo源代碼

1、Dubbo與Spring的整合 Dubbo在使用上可以做到非常簡單,不管是Provider還是Consumer都可以通過Spring的配置文件進行配置,配置完之後,就可以像使用 spring bean一樣進行服務暴露和調用了,完全看不到bbo api的存在。這是因為bbo使用了spring提供的可擴展Schema自定義配置支持。在spring配置文件中,可以像、這樣進行配置。 META-INF下的spring.handlers文件中指定了bbo的xml解析類:DubboNamespaceHandler。像前面的被解 析成ServiceConfig,被解析成ReferenceConfig等等。 2、jdk spi擴展 由於Dubbo是開源框架,必須要提供很多的可擴展點。Dubbo是通過擴展jdk spi機制來實現可擴展的。具體來說,就是在META-INF目錄下,放置文件名為介面全稱,文件中為key、value鍵值對,value為具體實現類 的全類名,key為標志值。由於bbo使用了url匯流排的設計,即很多參數通過URL對象來傳遞,在實際中,具體要用到哪個值,可以通過url中的參 數值來指定。 Dubbo對spi的擴展是通過ExtensionLoader來實現的,查看ExtensionLoader的源碼,可以看到Dubbo對jdk spi做了三個方面的擴展:
(1)jdk spi僅僅通過介面類名獲取所有實現,而ExtensionLoader則通過介面類名和key值獲取一個實現;
(2)Adaptive實現,就是生成一個代理類,這樣就可以根據實際調用時的一些參數動態決定要調用的類了。
(3)自動包裝實現,這種實現的類一般是自動激活的,常用於包裝類,比如Protocol的兩個實現類:ProtocolFilterWrapper、ProtocolListenerWrapper。 3、url匯流排設計 Dubbo為了使得各層解耦,採用了url匯流排的設計。我們通常的設計會把層與層之間的交互參數做成Model,這樣層與層之間溝通成本比較大,擴展起來也比較麻煩。因此,Dubbo把各層之間的通信都採用url的形式。比如,注冊中心啟動時,參數的url為: registry://0.0.0.0:9090?codec=registry&transporter=netty 這就表示當前是注冊中心,綁定到所有ip,埠是9090,解析器類型是registry,使用的底層網路通信框架是netty。
二、Dubbo啟動過程
Dubbo分為注冊中心、服務提供者(provider)、服務消費者(consumer)三個部分。 1、注冊中心啟動過程 注冊中心的啟動過程,主要看兩個類:RegistrySynchronizer、RegistryReceiver,兩個類的初始化方法都是start。 RegistrySynchronizer的start方法:
(1)把所有配置信息load到內存;
(2)把當前注冊中心信息保存到資料庫
(3)啟動5個定時器。 5個定時器的功能是: (1)AutoRedirectTask,自動重定向定時器。默認1小時運行1次。如果當前注冊中心的連接數高於平均值的1.2倍,則將多出來的連接數重定向到其他注冊中心上,以達到注冊中心集群的連接數均衡。 (2)DirtyCheckTask,臟數據檢查定時器。作用是:分別檢查緩存provider、資料庫provider、緩存consumer、資料庫 consumer的數據,清除臟數據;清理不存活的provider和consumer數據;對於緩存中的存在的provider或consumer而數 據庫不存在,重新注冊和訂閱。 (3)ChangedClearTask,changes變更表的定時清理任務。作用是讀取changes表,清除過期數據。 (4)AlivedCheckTask,注冊中心存活狀態定時檢查,會定時更新registries表的expire欄位,用以判斷注冊中心的存活狀態。如果有新的注冊中心,發送同步消息,將當前所有注冊中心的地址通知到所有客戶端。 (5)ChangedCheckTask,變更檢查定時器。檢查changes表的變更,檢查類型包括:參數覆蓋變更、路由變更、服務消費者變更、權重變更、負載均衡變更。

閱讀全文

與dubbo服務提供者的配置文件相關的資料

熱點內容
f3文件 瀏覽:523
快手3d環繞音樂用什麼app 瀏覽:376
linux新增一個文件 瀏覽:440
消失的手機圖片在哪個文件夾里 瀏覽:610
word2010表格外框雙線內框單線 瀏覽:56
powermill如何提高編程速度 瀏覽:465
遙感30號衛星數據存在哪裡 瀏覽:846
請領導看文件應該用什麼詞 瀏覽:273
bt工具 瀏覽:86
js循環獲取最大值 瀏覽:846
如何把網站激活 瀏覽:453
pdf文件怎麼轉換成dwg 瀏覽:151
有哪些擴展名表示為圖鑒圖片文件 瀏覽:843
怎麼破解小米賬戶密碼是多少 瀏覽:864
pdf文件名怎麼換顏色 瀏覽:868
核桃編程如何退錢 瀏覽:17
如何查看預約app 瀏覽:774
數控哪個編程軟體速度最快 瀏覽:135
qq表情白眼是哪個 瀏覽:965
shell循環文件名 瀏覽:602

友情鏈接