spring-boot整合dubbo相關知識點補充
前言
昨天我們分享了spring-boot
整合dubbo
的相關內容,不過準確地說,應該是和spring
整合,因為我們其實並沒有用dubbo
的starter
,而是通過註解的方式把dubbo
的相關配置注入到spring
的ioc
容器中。
這種方式只是省去了xml
配置的繁瑣配置,改成了註解的方式,本質上只能算web
層面的整合,因為spring-boot
的核心在stater
,starter
的核心在自動配置,關於定製自己的spring-starter
我們前面有分享過,感興趣的小夥伴可以去看下:
不過,這對不喜歡xml
配置的小夥伴來說(我算其中有一個,當然xml
有其優勢),已經算福音了。好了,廢話就說這麼多,今天我們來對昨天的內容做一個簡單的補充說明,由於昨天的內容過於繁雜,而且內容有點多,好多細節的知識點,沒有在展開說明,下面我們就來對這些知識點做一個說明。
dubbo內容補充
配置
dubbo
的配置主要有三部分,一部分是註冊中心的相關配置,一部分是應用本身的配置,另外一部分是註冊中心的配置。今天主要說明前兩種配置,註冊中心的配置暫時先不講。
服務註冊配置
服務註冊的配置還是比較多的,下面是RegistryConfig
的屬性:
// 註冊中心地址 private String address; // 註冊中心使用者名稱 private String username; // 註冊中心登入密碼 private String password; // 註冊中心埠 private Integer port; // 註冊中心協議 private String protocol; // 網路傳輸型別 private String transporter; // 具體作用不詳 private String server; // 註冊中心客戶端型別 private String client; /** * 叢集型別 * 影響流量在註冊中心之間的分佈方式,在訂閱多個註冊中心時非常有用,可用選項: * 1.zone-aware,根據流量的來源,特定型別的流量始終進入一個登錄檔。 */ private String cluster; /** * 註冊中心所屬的區域,通常用於隔離流量 */ private String zone; /** * 服務所屬組 */ private String group; /** * 服務版本 */ private String version; /** * 註冊中心請求超時時間,單位毫秒 */ private Integer timeout; /** * 註冊中心會話超時時間,單位毫秒 */ private Integer session; /** * 儲存註冊中心動態列表的檔案 */ private String file; /** * 停止服務等待時間 */ private Integer wait; /** * 啟動時是否檢查註冊中心是否可用 */ private Boolean check; /** * 是否允許動態服務在註冊中心註冊 */ private Boolean dynamic; /** * 是否在註冊中心匯出服務 */ private Boolean register; /** * 是否允許在註冊中心訂閱服務 */ private Boolean subscribe; /** * 自定義引數 */ private Map<String, String> parameters; /** * 是否為預設註冊中心 */ private Boolean isDefault; /** * 簡化註冊。對提供者和使用者都很有用 * * @since 2.7.0 */ private Boolean simplified; /** * 簡化登錄檔後,應單獨新增一些引數。僅限服務提供者 * <p> * such as: extra-keys = A,b,c,d * * @since 2.7.0 */ private String extraKeys; /** * 該地址是否作為配置中心工作 */ private Boolean useAsConfigCenter; /** * 該地址是否用作遠端元資料中心 */ private Boolean useAsMetadataCenter; /** * 此註冊中心接受的rpc協議列表,例如,“dubbo,rest” */ private String accepts; /** * 如果設定為true,則始終首先使用此註冊中心,在訂閱多個登錄檔時非常有用 */ private Boolean preferred; /** * 請求權重(叢集) * 影響註冊中心間的流量分佈,在訂閱多個註冊中時非常有用 * 僅在未指定首選登錄檔時生效。 */ private Integer weight;
以上配置只有address
和client
是必須配置的,其餘的都是可以不配置的,下面我們選一些常用的屬性簡單介紹下:
-
address
:註冊中心地址,以zk
為例的話,就是:zookeeper://127.0.0.1:2181
; -
client
:客戶端型別,對2.7.1
之後得版本,如果註冊中心是zk
d的話,只能是curator
-
username
和password
:這個應該不用解釋了,zk
應該不用配置這個 -
port
:這個埠,目前沒發現有啥用,畢竟地址裡面已經包含埠了 -
protocol
:註冊中心支援的協議型別,我發現dubbo
支援的型別還挺多的,包括dubbo
、rest
、http
、redis
-
transporter
:網路傳輸協議也比較多,預設應該是netty
,因為dubbo
預設引入了netty
的包 -
group
:註冊的服務預設情況下(不指定group
)所屬服務組。通常我們在註冊服務的時候,會指定服務所屬服務組,如果你不指定所屬服務組,則會取當前設定的值,這個配置的預設值目前還沒研究 -
version
:這個配置和group
類似,不過這個設定的是服務的版本,如果不指定就會取該值,這個值可以在服務註冊時設定,但是設定的只是單個服務的版本 -
timeout
:這個設定的是rpc
請求的超時時間,也是個預設值,這個值可以在服務註冊的時候指定,如果你不指定,就會取這個值
應用配置
/**
* 應用名稱
*/
private String name;
/**
* 應用版本
*/
private String version;
/**
* 應用所屬者
*/
private String owner;
/**
* 應用所屬組織
*/
private String organization;
/**
* 應用架構
*/
private String architecture;
/**
* 環境 例如: dev 、test 或者 production
*/
private String environment;
/**
* Java 編譯版本
*/
private String compiler;
/**
* 日誌等級
*/
private String logger;
/**
* 註冊中心列表
*/
private List<RegistryConfig> registries;
private String registryIds;
/**
* 監控中心
*/
private MonitorConfig monitor;
/**
* 是否為預設
*/
private Boolean isDefault;
/**
* thread dump儲存地址
*/
private String dumpDirectory;
/**
* 是否啟用qos
*/
private Boolean qosEnable;
/**
* qos監聽主機地址
*/
private String qosHost;
/**
* qos監聽埠
*/
private Integer qosPort;
/**
* 是否允許外網訪問
*/
private Boolean qosAcceptForeignIp;
/**
* 自定義引數
*/
private Map<String, String> parameters;
/**
* 服務停止等待時間
*/
private String shutwait;
private String hostname;
/**
* 元資料型別: local 或者 remote, 如果選擇remote, 還需要指定元資料中心
*/
private String metadataType;
private Boolean registerConsumer;
private String repository;
應用配置,只有name
是必須的,其他都是非必須的。註釋也很詳細了,這裡就不作過多說明了。
消費者配置
消費者的配置和提供者配置一樣,所以這裡我們就不再贅述。
注入配置
前天我們的演示例項中,我們是直接把配置項寫死的,今天我們來看下如何通過配置檔案設定我我們的配置。
首先,我們在spring-boot
的appliaction.properties
中加入dubbo
的配置:
# dubbo應用配置
# dubbo應用名稱
application.dubbo.application.name=dubbo-server
# dubbo註冊配置
# dubbo註冊中心地址
application.dubbo.registry.address=zookeeper://127.0.0.1:2181
# dubbo註冊中心型別
application.dubbo.registry.client=curator
#application.dubbo.registry.username=dubbo
#application.dubbo.registry.password=dubbo
#application.dubbo.registry.port=20880
#application.dubbo.registry.protocol=20880
#application.dubbo.registry.transporter=20880
#application.dubbo.registry.cluster=20880d
#application.dubbo.registry.zone=20880d
#application.dubbo.registry.group=20880d
#application.dubbo.registry.version=1.0
#application.dubbo.registry.timeout=60000
#application.dubbo.registry.session=30000
#application.dubbo.registry.file=20880d
#application.dubbo.registry.wait=30000
#application.dubbo.registry.check=true
#application.dubbo.registry.dynamic=true
#application.dubbo.registry.register=true
#application.dubbo.registry.subscribe=true
#application.dubbo.registry.parameters.name=syske
#application.dubbo.registry.default=true
#application.dubbo.registry.simplified=true
#application.dubbo.registry.extraKeys=true
#application.dubbo.registry.useAsConfigCenter=true
#application.dubbo.registry.useAsMetadataCenter=true
#application.dubbo.registry.accepts=true
#application.dubbo.registry.preferred=true
#application.dubbo.registry.weight=10
然後在dubbo
的配置類,加入如下程式碼:
@Bean
@ConfigurationProperties(ignoreUnknownFields = false, prefix = "application.dubbo.application")
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
return applicationConfig;
}
@Bean
@ConfigurationProperties(ignoreUnknownFields = false, prefix = "application.dubbo.registry")
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
return registryConfig;
}
這裡簡單介紹下,@ConfigurationProperties
註解可以和@Bean
組合使用,這樣在建立bean
的時候,就可以把我們的配置檔案直接注入到我們bean
的屬性中,確實也很方便。
需要注意的是,prefix
的字首必須與properties
中的配置相對應,否則配置無法被注入。
另一個需要注意的是,如果配置項是isXXX
,則需要確認isXXX
的設定方法是否是setIsXXX
,如果是,properties
配置就可以寫成isXXX
,總之要和set
方法一致,否則會報錯:
註解
註解這塊主要有兩個註解註解比較重要,一個@DubboService
,一個是@Reference
。
DubboService
@DubboService
註解是2.7.7
引入的,其主要作用就是為了標記和配置服務提供者,它的前任是@Service
,這個註解也算是個新人,它是2.7.0
引入的,從註解屬性上看,他們沒有本質區別,@Service
目前已經被棄用,我猜測棄用應該是註解名稱太容易被混淆了,不利於服務程式碼開發維護,畢竟spring
的原生註解也就@Service
:
文件也說的很清楚,DubboService
是Serivce
的繼任者。
DubboReference
@Reference
註解也是dubbo 2.7.7
引入的,主要是用來發現服務的,也就是標記服務消費者。這個註解的繼任者是Reference
,也是2.7.0
引入的。
說明,在dubbo 2.7.0
之前的版本是不支援註解式配置,而且我發現2.7.0
以前的版本是屬於com.alibaba
這個groupId
的,之後的版本是org.apache.dubbo
這個groupId
的,這是因為在2.7.0
之後,阿里巴巴把dubbo
捐獻給apache
基金會了,現在它是apache
旗下的頂級專案之一。
總結
dubbo
的知識點還是比較多的,算上今天我們補充的內容,我們目前已經分享的內容也只能算冰山一角的一角,但是到今天我們也算對dubbo
有了一個最基本的認知了,從專案建立,到專案啟動,再到專案配置,整個流程我們應該已經比較熟悉了,如果有小夥伴已經忘記了,可以回顧下之前的內容,至於其他更復雜的配置和高階用法,我們在後面的學習過程中,會繼續分享,繼續深挖。好了,今天的內容就到這裡吧!