1. 程式人生 > 其它 >spring-boot整合dubbo相關知識點補充

spring-boot整合dubbo相關知識點補充

前言

昨天我們分享了spring-boot整合dubbo的相關內容,不過準確地說,應該是和spring 整合,因為我們其實並沒有用dubbostarter,而是通過註解的方式把dubbo的相關配置注入到springioc容器中。

這種方式只是省去了xml配置的繁瑣配置,改成了註解的方式,本質上只能算web層面的整合,因為spring-boot的核心在staterstarter的核心在自動配置,關於定製自己的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;

以上配置只有addressclient是必須配置的,其餘的都是可以不配置的,下面我們選一些常用的屬性簡單介紹下:

  • address:註冊中心地址,以zk為例的話,就是:zookeeper://127.0.0.1:2181

  • client:客戶端型別,對2.7.1之後得版本,如果註冊中心是zkd的話,只能是curator

  • usernamepassword:這個應該不用解釋了,zk應該不用配置這個

  • port:這個埠,目前沒發現有啥用,畢竟地址裡面已經包含埠了

  • protocol:註冊中心支援的協議型別,我發現dubbo支援的型別還挺多的,包括dubboresthttpredis

    等,具體大家可以看下圖:

  • 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-bootappliaction.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

文件也說的很清楚,DubboServiceSerivce的繼任者。

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有了一個最基本的認知了,從專案建立,到專案啟動,再到專案配置,整個流程我們應該已經比較熟悉了,如果有小夥伴已經忘記了,可以回顧下之前的內容,至於其他更復雜的配置和高階用法,我們在後面的學習過程中,會繼續分享,繼續深挖。好了,今天的內容就到這裡吧!