Dubbo服務化框架使用整理


一、垂直應用架構拆分

      在應用架構的演進過程中,垂直應用架構因為開發便捷,學習成本低,對於實現業務功能的增刪改查提供了高效的開發支持,有利於前期業務高速發展的的快速實現。但是隨着系統業務功能的不斷擴展和系統代碼的的不斷攀

升業務模塊與模塊之間的高耦合度、核心業務的穩定性、根據市場的需求應用前端需要針對不同的業務場景實現不同的有針對性的修改這時候傳統的垂直應用架構就滿足不了需求,因而需要引入分布式服務框架(RPC框架)

來實現將系統進行水平和垂直拆分,拆分成各個相對獨立的服務功能,實現服務的提供者和服務的消費者之間的解耦。另一方面方便將重點業務模塊集群化實現重點業務的高可用和高穩定性。

       (1)拆分前應用架構的組織形式

控制器層直接調用業務邏輯層,業務邏輯服務類之間也是直接調用。即服務的提供者和服務的消費者之間高度的耦合。

      (2)如何拆分

1)垂直拆分:

將三層架構中的控制器層、業務邏輯層、數據訪問層進行垂直拆分。可以拆分成不同的三個工程項目 控制器層單獨一個項目,業務邏輯層接口層一個工程項目,業務邏輯實現(包含數據訪問層)單獨一個工程項目。

2)水平拆分:

將業務邏輯成中各個相對獨立的業務模塊或者公共業務模塊等進行拆分成單獨的工程項目。公共的工具類、公共的項目配置、公共的業務實體都可以拆分層相對獨立的工程項目。

      (3)拆分后的應用架構的組織形式

服務消費者通過服務注冊中心發現服務提供者,實現服務消費者和提供者之間的解耦。一個服務可以同時是服務的提供者也可以是服務的消費者。

image

                                                                                                                                                                                                               部分參考 李林峰 《分布式服務框架原理與實踐》

二、引入Dubbo RPC框架支持

         1、工程項目添加Dubbo框架支持

工程項目添加dubbo的jar包和其所依賴的所有jar包

image

         2、服務的注冊和引用

1)配置說明

無論服務提供者還是服務消費者的配置當中都需要對XML配置文件添加dubbo名稱空間的支持

image

2)服務注冊(服務提供者的配置) remote-provider.xml :

<dubbo:application   name=”XXXX”> :配置當前所在工程項目的應用名稱,用於注冊中心計算應用間的依賴關系 服務提供者的應用名稱不能和服務消費者的應用名稱一樣。

               其他部分可選參數:version表示當前應用的版本號;

                                    owner表示當前應用的負責人;

                                    organization:組織名稱(BU或部門),用於注冊中心區分服務來源,此配置項建議不要使用autoconfig,直接寫死在配置中,比如china,intl,itu,crm,asc,dw,aliexpress等;

                                    architecture:用於服務分層對應的架構。如,intl、china。不同的架構使用不同的分層。

                                    environment:設置當前服務的應用環境,如:develop/test/product,不同環境使用不同的缺省值,以及作為只用於開發測試功能的限制條件


   <dubbo:registry   protocol=” ”   address=” ”/>:配置注冊中心。配置當前服務提供者所要注冊到的注冊中心的地址和注冊中心地址協議等(其中address為必填項)

           address:<host:port>注冊中心服務器地址,如果地址沒有端口缺省為9090,同一集群內的多個地址用逗號分隔,如:ip:port,ip:port,不同集群的注冊中心,請配置多個<dubbo:registry>標簽

      如果有多個不同的注冊中心,可以聲明多個<dubbo:registry>標簽,並在<dubbo:service>或<dubbo:reference>的registry屬性指定使用的注冊中心.即服務提供者可以將服務注冊到不同地址的注冊中心,注冊中心也可以使用不同的地址協議。

         示例:

             <dubbo:registry  id=”zookeeper105”   address=”192.168.1.1.105:8090” protocol=”dubbo”/>

             <dubbo:registry  id=”zookeeper106_107”   address=”192.168.1.1.106:8090,192.168.1.1.107:8090” protocol=”http”/>

             <dubbo:registry  id=”zookeeper104”   address=”192.168.1.1.104” protocol=”local”/>

            其他可選參數:

                                id :注冊中心引用BeanId,可以在<dubbo:service registry="">或<dubbo:reference registry="">中引用此ID;

                        protocol:注冊中心地址協議,支持dubbo, http, local三種協議,分別表示,dubbo地址,http地址,本地注冊中心;

                             port:注冊中心缺省端口,當address沒有帶端口時使用此端口做為缺省值

                      username:登錄注冊中心用戶名,如果注冊中心不需要驗證可不填
                      password:登錄注冊中心密碼,如果注冊中心不需要驗證可不填

                   transporter:網絡傳輸方式,可選mina,netty
                        timeout:注冊中心請求超時時間(毫秒)
                         session:注冊中心會話超時時間(毫秒),用於檢測提供者非正常斷線后的臟數據,比如用心跳檢測的實現,此時間就是心跳間隔,不同注冊中心實現不一樣。
                               file:使用文件緩存注冊中心地址列表及服務提供者列表,應用重啟時將基於此文件恢復,注意:兩個注冊中心不能使用同一文件存儲
                             wait:停止時等待通知完成時間(毫秒)
                          check:注冊中心不存在時,是否報錯
                       register:是否向此注冊中心注冊服務,如果設為false,將只訂閱,不注冊(開發測試環境下使用)                     
                     subscribe:是否向此注冊中心訂閱服務,如果設為false,將只注冊,不訂閱(開發測試環境下使用)
                       dynamic:服務是否動態注冊,如果設為false,注冊后將顯示后disable狀態,需人工啟用,並且服務提供者停止時,也不會自動取消冊,需人工禁用。


    <dubbo:protocol    name=”  ”    port=””/>:服務提供者協議的配置。

                    name:協議名稱,必填項,默認值為dubbo;

                       port: 服務端口,可選 dubbo協議缺省端口為20880,rmi協議缺省端口為1099,http和hessian協議缺省端口為80。如果配置為-1 或者 沒有配置port,則會分配一個沒有被占用的端口。Dubbo 2.4.0+,分配的端口在協議缺省端口的基礎上增長,確保端口段可控。

              threadpool:線程池類型,線程池類型,可選:fixed/cached 默認fixed

                  threads:服務線程池大小(固定大小), 可選,默認100

        iothreads:io線程池大小(固定大小)     默認值:cpu個數+1               
        accepts    服務提供方最大可接受連接數     默認值:0               
        payload    請求及響應數據包大小限制,單位:字節    默認值:88388608(=8M)               
        codec    協議編碼方式    默認值:dubbo               
        serialization    協議序列化方式,當協議支持多種序列化方式時使用,比如:dubbo協議的dubbo,hessian2,java,compactedjava,以及http協議的json等     默認值:dubbo協議缺省為hessian2,rmi協議缺省為java,http協議缺省為json               
        path        提供者上下文路徑,為服務path的前綴
        transporter    協議的服務端和客戶端實現類型,比如:dubbo協議的mina,netty等,可以分拆為server和client配置       默認值:    dubbo協議缺省為netty               
        server    協議的服務器端實現類型,比如:dubbo協議的mina,netty等,http協議的jetty,servlet等    2.0.5以上版本    默認值:dubbo協議缺省為netty,http協議缺省為servlet               
        client    協議的客戶端實現類型,比如:dubbo協議的mina,netty等    dubbo協議缺省為netty               
        dispatcher    協議的消息派發方式,用於指定線程模型,比如:dubbo協議的all, direct, message, execution, connection等    2.1.0以上版本    默認值:dubbo協議缺省為all               
        queues    線程池隊列大小,當線程池滿時,排隊等待執行的隊列大小,建議不要設置,當線程程池時應立即失敗,重試其它服務提供機器,而不是排隊,除非有特殊需求。    2.0.5以上版本    默認值: 0               
        charset    序列化編碼  2.0.5以上版本    默認值:UTF-8                   
        buffer    網絡讀寫緩沖區大小    2.0.5以上版本    默認值:8192               
        heartbeat    心跳間隔,對於長連接,當物理層斷開時,比如拔網線,TCP的FIN消息來不及發送,對方收不到斷開事件,此時需要心跳來幫助檢查連接是否已斷開    2.0.10以上版本    0               
        telnet    所支持的telnet命令,多個命令用逗號分隔    2.0.5以上版本   
        register    該協議的服務是否注冊到注冊中心    默認值:true    服務治理   


   <dubbo:service      interface=”  ”     ref=””/>:服務提供者暴露服務配置

                  interface:服務接口名 ,必填

                  ref:服務對象實現引用,必填

                 version:服務版本,建議使用兩位數字版本,如:1.0,通常在接口不兼容時版本號才需要升級,默認:0.0.0

                 group:服務分組,當一個接口有多個實現,可以用分組區分

                 delay:延遲注冊服務時間(毫秒) ,設為-1時,表示延遲到Spring容器初始化完成時暴露服務,默認:0

                 timeout:遠程服務調用超時時間(毫秒),默認:1000

                 retries:遠程服務調用重試次數,不包括第一次調用,不需要重試請設為0 ,默認:2

                 connections:對每個提供者的最大連接數,rmi、http、hessian等短連接協議表示限制連接數,dubbo等長連接協表示建立的長連接個數。默認:100

                 loadbalance:負載均衡策略,可選值:random,roundrobin,leastactive,分別表示:隨機,輪循,最少活躍調用  ,,默認:random

                 stub:設為true,表示使用缺省代理類名,即:接口名 + Local后綴,服務接口客戶端本地代理類名,用於在客戶端執行本地邏輯,如本地緩存等,該本地代理類的構造函數必須允許傳入遠程代理對象,構造函數如:public XxxServiceLocal(XxxService xxxService)默認值false

                 mock:為true,表示使用缺省Mock類名,即:接口名 + Mock后綴,服務接口調用失敗Mock實現類,該Mock類必須有一個無參構造函數,與Local的區別在於,Local總是被執行,而Mock只在出現非業務異常(比如超時,網絡異常等)時執行,Local在遠程調用之前執行,Mock在遠程調用后執行。默認false

                 token: 令牌驗證,為空表示不開啟,如果為true,表示隨機生成動態令牌,否則使用靜態令牌,令牌的作用是防止消費者繞過注冊中心直接訪問,保證注冊中心的授權功能有效,如果使用點對點調用,需關閉令牌功能

默認:false

                 registry:向指定注冊中心注冊,在多個注冊中心時使用,值為<dubbo:registry>的id屬性,多個注冊中心ID用逗號分隔,如果不想將該服務注冊到任何registry,可將值設為N/A    缺省向所有registry注冊

                 provider:指定provider,值為<dubbo:provider>的id屬性   缺使用第一個provider配置

                deprecated:服務是否過時,如果設為true,消費方引用時將打印服務過時警告error日志  默認false

                dynamic:服務是否動態注冊,如果設為false,注冊后將顯示后disable狀態,需人工啟用,並且服務提供者停止時,也不會自動取消冊,需人工禁用。 默認:true

             accesslog        設為true,將向logger中輸出訪問日志,也可填寫訪問日志文件路徑,直接把訪問日志輸出到指定文件    2.0.5以上版本false               
            owner           服務負責人,用於        ,請填寫負責人公司郵箱前綴    2.0.5以上版本
            document                     服務文檔URL    2.0.5以上版本
            weight        服務權重    2.0.5以上版本
            executes    服務提供者每服務每方法最大可並行執行請求數    2.0.5以上版本     默認值:0               
            actives       每服務消費者每服務每方法最大並發調用數    2.0.5以上版本  默認值:0               
            proxy    生成動態代理方式,可選:jdk/javassist    2.0.5以上版本       默認值:javassist               
            cluster       集群方式,可選:failover/failfast/failsafe/failback/forking    2.0.5以上版本,     默認值failover               
            filter    服務提供方遠程調用過程攔截器名稱,多個名稱用逗號分隔    2.0.5以上版本    默認值default               
            listener    服務提供方導出服務監聽器名稱,多個名稱用逗號分隔       默認值:    default               
            protocol         使用指定的協議暴露服務,在多協議時使用,值為<dubbo:protocol>的id屬性,多個協議ID用逗號分隔    2.0.5以上版本   
            layer    服務提供者所在的分層。如:biz、dao、intl:web、china:acton。    2.0.7以上版本                    
            register    該協議的服務是否注冊到注冊中心    默認值true


<dubbo:provider  /> 服務提供者缺省值配置

                id:協議BeanId,可以在<dubbo:service proivder="">中引用此ID

iothreads:io線程池大小(固定大小)     默認值:cpu個數+1               
        accepts    服務提供方最大可接受連接數     默認值:0               
        payload    請求及響應數據包大小限制,單位:字節    默認值:88388608(=8M)               
        codec    協議編碼方式    默認值:dubbo               
        serialization    協議序列化方式,當協議支持多種序列化方式時使用,比如:dubbo協議的dubbo,hessian2,java,compactedjava,以及http協議的json等     默認值:dubbo協議缺省為hessian2,rmi協議缺省為java,http協議缺省為json               
        path        提供者上下文路徑,為服務path的前綴
        transporter    協議的服務端和客戶端實現類型,比如:dubbo協議的mina,netty等,可以分拆為server和client配置       默認值:    dubbo協議缺省為netty               
        server    協議的服務器端實現類型,比如:dubbo協議的mina,netty等,http協議的jetty,servlet等    2.0.5以上版本    默認值:dubbo協議缺省為netty,http協議缺省為servlet               
        client    協議的客戶端實現類型,比如:dubbo協議的mina,netty等    dubbo協議缺省為netty               
        dispatcher    協議的消息派發方式,用於指定線程模型,比如:dubbo協議的all, direct, message, execution, connection等    2.1.0以上版本    默認值:dubbo協議缺省為all               
        queues    線程池隊列大小,當線程池滿時,排隊等待執行的隊列大小,建議不要設置,當線程程池時應立即失敗,重試其它服務提供機器,而不是排隊,除非有特殊需求。    2.0.5以上版本    默認值: 0               
        charset    序列化編碼  2.0.5以上版本    默認值:UTF-8         

               version:服務版本,建議使用兩位數字版本,如:1.0,通常在接口不兼容時版本號才需要升級,默認:0.0.0

                 group:服務分組,當一個接口有多個實現,可以用分組區分

               delay:延遲注冊服務時間(毫秒) ,設為-1時,表示延遲到Spring容器初始化完成時暴露服務,默認:0

                 timeout:遠程服務調用超時時間(毫秒),默認:1000

                 retries:遠程服務調用重試次數,不包括第一次調用,不需要重試請設為0 ,默認:2

                 connections:對每個提供者的最大連接數,rmi、http、hessian等短連接協議表示限制連接數,dubbo等長連接協表示建立的長連接個數。默認:100

                 loadbalance:負載均衡策略,可選值:random,roundrobin,leastactive,分別表示:隨機,輪循,最少活躍調用  ,,默認:random

                 stub:設為true,表示使用缺省代理類名,即:接口名 + Local后綴,服務接口客戶端本地代理類名,用於在客戶端執行本地邏輯,如本地緩存等,該本地代理類的構造函數必須允許傳入遠程代理對象,構造函數如:public XxxServiceLocal(XxxService xxxService)默認值false

                 mock:為true,表示使用缺省Mock類名,即:接口名 + Mock后綴,服務接口調用失敗Mock實現類,該Mock類必須有一個無參構造函數,與Local的區別在於,Local總是被執行,而Mock只在出現非業務異常(比如超時,網絡異常等)時執行,Local在遠程調用之前執行,Mock在遠程調用后執行。默認false

                 token: 令牌驗證,為空表示不開啟,如果為true,表示隨機生成動態令牌,否則使用靜態令牌,令牌的作用是防止消費者繞過注冊中心直接訪問,保證注冊中心的授權功能有效,如果使用點對點調用,需關閉令牌功能

默認:false

                 registry:向指定注冊中心注冊,在多個注冊中心時使用,值為<dubbo:registry>的id屬性,多個注冊中心ID用逗號分隔,如果不想將該服務注冊到任何registry,可將值設為N/A    缺省向所有registry注冊

                 provider:指定provider,值為<dubbo:provider>的id屬性   缺使用第一個provider配置

                deprecated:服務是否過時,如果設為true,消費方引用時將打印服務過時警告error日志  默認false

                dynamic:服務是否動態注冊,如果設為false,注冊后將顯示后disable狀態,需人工啟用,並且服務提供者停止時,也不會自動取消冊,需人工禁用。 默認:true

             accesslog        設為true,將向logger中輸出訪問日志,也可填寫訪問日志文件路徑,直接把訪問日志輸出到指定文件    2.0.5以上版本false               
            owner           服務負責人,用於        ,請填寫負責人公司郵箱前綴    2.0.5以上版本
            document                     服務文檔URL    2.0.5以上版本
            weight        服務權重    2.0.5以上版本
            executes    服務提供者每服務每方法最大可並行執行請求數    2.0.5以上版本     默認值:0               
            actives       每服務消費者每服務每方法最大並發調用數    2.0.5以上版本  默認值:0               
            proxy    生成動態代理方式,可選:jdk/javassist    2.0.5以上版本       默認值:javassist               
            cluster       集群方式,可選:failover/failfast/failsafe/failback/forking    2.0.5以上版本,     默認值failover               
            filter    服務提供方遠程調用過程攔截器名稱,多個名稱用逗號分隔    2.0.5以上版本    默認值default               
            listener    服務提供方導出服務監聽器名稱,多個名稱用逗號分隔       默認值:    default               
            protocol         使用指定的協議暴露服務,在多協議時使用,值為<dubbo:protocol>的id屬性,多個協議ID用逗號分隔    2.0.5以上版本   
            layer    服務提供者所在的分層。如:biz、dao、intl:web、china:acton。    2.0.7以上版本                    
            register    該協議的服務是否注冊到注冊中心    默認值true

image

 

3)服務引用(服務消費者的配置) remote-consumer.xml


<dubbo:reference interface=”” id=””/> :服務消費者引用服務配置

                 interface:服務接口名 ,必填

                  id:服務對象實現引用,必填

                 url:點對點直連服務提供者地址,將繞過注冊中心  接口開發時直連測試

                 version:服務版本,建議使用兩位數字版本,如:1.0,通常在接口不兼容時版本號才需要升級,默認:0.0.0

                 group:服務分組,當一個接口有多個實現,可以用分組區分

                 delay:延遲注冊服務時間(毫秒) ,設為-1時,表示延遲到Spring容器初始化完成時暴露服務,默認:0

                 timeout:遠程服務調用超時時間(毫秒),默認:1000

                 retries:遠程服務調用重試次數,不包括第一次調用,不需要重試請設為0 ,默認:2

                 connections:對每個提供者的最大連接數,rmi、http、hessian等短連接協議表示限制連接數,dubbo等長連接協表示建立的長連接個數。默認:100

                 loadbalance:負載均衡策略,可選值:random,roundrobin,leastactive,分別表示:隨機,輪循,最少活躍調用  ,,默認:random

                 stub:設為true,表示使用缺省代理類名,即:接口名 + Local后綴,服務接口客戶端本地代理類名,用於在客戶端執行本地邏輯,如本地緩存等,該本地代理類的構造函數必須允許傳入遠程代理對象,構造函數如:public XxxServiceLocal(XxxService xxxService)默認值false

                 mock:為true,表示使用缺省Mock類名,即:接口名 + Mock后綴,服務接口調用失敗Mock實現類,該Mock類必須有一個無參構造函數,與Local的區別在於,Local總是被執行,而Mock只在出現非業務異常(比如超時,網絡異常等)時執行,Local在遠程調用之前執行,Mock在遠程調用后執行。默認false

                 token: 令牌驗證,為空表示不開啟,如果為true,表示隨機生成動態令牌,否則使用靜態令牌,令牌的作用是防止消費者繞過注冊中心直接訪問,保證注冊中心的授權功能有效,如果使用點對點調用,需關閉令牌功能

默認:false

                 registry:向指定注冊中心注冊,在多個注冊中心時使用,值為<dubbo:registry>的id屬性,多個注冊中心ID用逗號分隔,如果不想將該服務注冊到任何registry,可將值設為N/A    缺省向所有registry注冊

                 provider:指定provider,值為<dubbo:provider>的id屬性   缺使用第一個provider配置

                deprecated:服務是否過時,如果設為true,消費方引用時將打印服務過時警告error日志  默認false

                dynamic:服務是否動態注冊,如果設為false,注冊后將顯示后disable狀態,需人工啟用,並且服務提供者停止時,也不會自動取消冊,需人工禁用。 默認:true

             accesslog        設為true,將向logger中輸出訪問日志,也可填寫訪問日志文件路徑,直接把訪問日志輸出到指定文件    2.0.5以上版本false               
            owner           服務負責人,用於        ,請填寫負責人公司郵箱前綴    2.0.5以上版本
            document                     服務文檔URL    2.0.5以上版本
            weight        服務權重    2.0.5以上版本
            executes    服務提供者每服務每方法最大可並行執行請求數    2.0.5以上版本     默認值:0               
            actives       每服務消費者每服務每方法最大並發調用數    2.0.5以上版本  默認值:0               
            proxy    生成動態代理方式,可選:jdk/javassist    2.0.5以上版本       默認值:javassist               
            cluster       集群方式,可選:failover/failfast/failsafe/failback/forking    2.0.5以上版本,     默認值failover               
            filter    服務提供方遠程調用過程攔截器名稱,多個名稱用逗號分隔    2.0.5以上版本    默認值default               
            listener    服務提供方導出服務監聽器名稱,多個名稱用逗號分隔       默認值:    default               
            protocol         使用指定的協議暴露服務,在多協議時使用,值為<dubbo:protocol>的id屬性,多個協議ID用逗號分隔    2.0.5以上版本   
            layer    服務提供者所在的分層。如:biz、dao、intl:web、china:acton。    2.0.7以上版本                    
            register    該協議的服務是否注冊到注冊中心    默認值true


<dubbo:consumer>:服務消費者缺省值配置:

image

 

image

4)服務啟動

image

 

三、Zookeeper注冊中心安裝、配置和使用

 

四、Dubbo服務管理控制台安裝、配置和使用

五、Dubbo監控中心的安裝、配置和使用

六、服務化后項目部署

七、開發測試環境下Dubbo的使用和配置

八、Dubbo性能調優


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM