今天讀了一下dubbo的原始碼,dubbo原始碼本身主要包括以下幾個部分(包):common、config、container、monitor、registry、remoting、rpc,其中今天要說的日誌介面卡模式就在common包中。
首先我們來看日誌的呼叫方式如下:
public class dubboregistry extends failbackregistry
logge***ctory是dubbo自己封裝好的可以適配很多種日誌元件的工廠,下面來看下dubbo是怎麼在日誌服務方面使用介面卡模式,可以讓很多日誌元件適用於dubbo:
1、在factory中通過static靜態**塊的方式,從dubbo的配置檔案中讀取dubbo要使用的日誌元件,factory中有loggeradapter物件存放對應日誌的介面卡,判斷讀取的日誌後,new相應的介面卡賦值給loggeradapter物件,如下:
/**
* 日誌輸出器工廠
* * @author william.liangf
*/public class logge***ctory
private static volatile loggeradapter logger_adapter;
private static final concurrentmaploggers = new concurrenthashmap();
// 查詢常用的日誌框架
static else if ("jcl".equals(logger)) else if ("log4j".equals(logger)) else if ("jdk".equals(logger)) else catch (throwable e1) catch (throwable e2) catch (throwable e3) }}
}}}
2、每乙個日誌的介面卡類都實現了loggeradapter介面,該介面定義如下:
/**
* 日誌輸出器供給器
* * @author william.liangf
*/@spi
public inte***ce loggeradapter
3、相應的具體日誌介面卡實現該介面,實現具體的loggeradapter中定義的方法,比如核心的getlogger等,如下圖:
public class slf4jloggeradapter implements loggeradapter
public logger getlogger(class<?> key)
}
通過這樣的適配,可以使日誌元件靈活的應用於dubbo,而且可以靈活的新增新的日誌元件應用到dubbo框架中,比如現在比較流行的logback(log4j的公升級版本),我們就可以新新增乙個logback的adapter介面卡,然後實現loggeradapter的介面,通過logback實現具體的方法定義,然後在factory中在使用的時候直接new logbackadapter就可以使用了。
以上就是dubbo框架目前看到的設計模式,繼續學習中.......................
dubbo原始碼 服務目錄
dubbo用在微服務,那麼肯定是需要使用到集群的 面對集群就需要處理機器宕機的問題,如果是普通服務,乙個機子宕機,那麼我們還可以人工去維護,在集群裡面宕機,就很麻煩,所以需要我們軟體有容錯的功能,dubbo在容錯機制,分為四個 1.服務目錄 directory 也就是本章 2.服務路由router ...
Dubbo原始碼閱讀 三 Dubbo 服務註冊
通過註解來註冊dubbo服務的時候,在服務端和消費端都需要用到乙個元件dubbocomponentscanregistrar,先看下registerbeandefinitions 方法 public void registerbeandefinitions annotationmetadata im...
Dubbo服務註冊原始碼分析
服務在本地發布完成,那麼接下去要進入服務的註冊階段 final registry registry getregistry origininvoker final url registeredproviderurl geturltoregistry providerurl,registryurl d...