首页 > 代码库 > Dubbo服务化框架使用整理

Dubbo服务化框架使用整理

一、垂直应用架构拆分

      在应用架构的演进过程中,垂直应用架构因为开发便捷,学习成本低,对于实现业务功能的增删改查提供了高效的开发支持,有利于前期业务高速发展的的快速实现。但是随着系统业务功能的不断扩展和系统代码的的不断攀

升业务模块与模块之间的高耦合度、核心业务的稳定性、根据市场的需求应用前端需要针对不同的业务场景实现不同的有针对性的修改这时候传统的垂直应用架构就满足不了需求,因而需要引入分布式服务框架(RPC框架)

来实现将系统进行水平和垂直拆分,拆分成各个相对独立的服务功能,实现服务的提供者和服务的消费者之间的解耦。另一方面方便将重点业务模块集群化实现重点业务的高可用和高稳定性。

       (1)拆分前应用架构的组织形式

控制器层直接调用业务逻辑层,业务逻辑服务类之间也是直接调用。即服务的提供者和服务的消费者之间高度的耦合。

      (2)如何拆分

1)垂直拆分:

将三层架构中的控制器层、业务逻辑层、数据访问层进行垂直拆分。可以拆分成不同的三个工程项目 控制器层单独一个项目,业务逻辑层接口层一个工程项目,业务逻辑实现(包含数据访问层)单独一个工程项目。

2)水平拆分:

将业务逻辑成中各个相对独立的业务模块或者公共业务模块等进行拆分成单独的工程项目。公共的工具类、公共的项目配置、公共的业务实体都可以拆分层相对独立的工程项目。

      (3)拆分后的应用架构的组织形式

服务消费者通过服务注册中心发现服务提供者,实现服务消费者和提供者之间的解耦。一个服务可以同时是服务的提供者也可以是服务的消费者。

技术分享

                                                                                                                                                                                                               部分参考 李林峰 《分布式服务框架原理与实践》

二、引入Dubbo RPC框架支持

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

工程项目添加dubbo的jar包和其所依赖的所有jar包

技术分享

         2、服务的注册和引用

1)配置说明

无论服务提供者还是服务消费者的配置当中都需要对XML配置文件添加dubbo名称空间的支持

技术分享

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

技术分享

 


 

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

 

技术分享

 

三、Zookeeper注册中心安装、配置和使用

四、Dubbo服务管理控制台安装、配置和使用

五、Dubbo监控中心的安装、配置和使用

六、服务化后项目部署

七、开发测试环境下Dubbo的使用和配置

八、Dubbo性能调优

Dubbo服务化框架使用整理