色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

說一下Dubbo的工作原理

謝彥文2年前17瀏覽0評論

說一下Dubbo的工作原理?

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

1.dubbo 的調用流程

2.Dubbo整體設計

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

Dubbo 調用流程

架構圖

流程說明:

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

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

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

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

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

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

這么設計的意義:

Consumer 與Provider 解偶,雙方都可以橫向增減節點數。注冊中心對本身可做對等集群,可動態增減節點,并且任意一臺宕掉后,將自動切換到另一臺去中心化,雙方不直接依懶注冊中心,即使注冊中心全部宕機短時間內也不會影響服務的調用服務提供者無狀態,任意一臺宕掉后,不影響使用Dubbo 整體設計

config** 配置層**:對外配置接口,以 ServiceConfig, ReferenceConfig 為中心,可以直接初始化配置類,也可以通過 spring 解析配置生成配置類proxy 服務代理層:服務接口透明代理,生成動態代理 擴展接口為 ProxyFactoryregistry 注冊中心層:封裝服務地址的注冊與發現,以服務 URL 為中心,擴展接口為 RegistryFactory, Registry, RegistryServicecluster 路由層:封裝多個提供者的路由及負載均衡,并橋接注冊中心,以 Invoker 為中心,擴展接口為 Cluster, Directory, Router, LoadBalancemonitor 監控層:RPC 調用次數和調用時間監控,以 Statistics 為中心,擴展接口為 MonitorFactory, Monitor, MonitorServiceprotocol 遠程調用層:封裝 RPC 調用,以 Invocation, Result 為中心,擴展接口為 Protocol, Invoker, Exporterexchange 信息交換層:封裝請求響應模式,同步轉異步,以 Request, Response 為中心,擴展接口為 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServertransport 網絡傳輸層:抽象 mina 和 netty 為統一接口,以 Message 為中心,擴展接口為 Channel, Transporter, Client, Server, Codecserialize 數據序列化層:可復用的一些工具,擴展接口為 Serialization, ObjectInput, ObjectOutput, ThreadPool

其協作流程如下:

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

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

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

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

當前所引入的服務的提供者目錄:/dubbo/org.apache.dubbo.demo.DemoService/providers當前所引入的服務的老版本動態配置目錄:/dubbo/org.apache.dubbo.demo.DemoService/configurators當前所引入的服務的老版本路由器目錄:/dubbo/org.apache.dubbo.demo.DemoService/routers

比如監控providers 目錄:

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

我們在看調用時的代碼:

我們看到 FailoverClusterInvoker 的doInvoke方法

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

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

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

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

總結

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

監聽java,說一下Dubbo的工作原理