Dubbo配置基础V1.0.0

Dubbo配置文件详解

一、应用架构演变

  • 单一服务架构
  • 垂直服务架构
  • 分布式服务架构
  • 流动计算架构

二、Dubbo介绍

  • Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
  • 核心内容:
    • 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
    • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
    • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
  • Dubbo主要由服务提供者,服务消费者,注册中心,监控中心几个节点角色组成。

三、Dubbo主要配置

3.1、指定服务在dubbo中的名称

<dubbo:application name="producer"/>

3.2、指定dubbo注册中心地址

<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>

3.3、指定通信规则

<dubbo:protocol name="dubbo" port="20882" />

3.4、暴露服务

<dubbo:service interface="com.dgc.learn.service.UserService" ref="userServiceImpl" />

3.5、引用服务

<dubbo:reference interface="com.dgc.learn.service.UserService" id="userService" />

四、Dubbo常用配置

4.1、超时配置

  • 由于网络原因,可能会出现不确定的中间状态(超时),为防止因超时引起的阻塞,需设置超时时间

  • 消费端

    • 全局超时配置:
    <dubbo:consumer timeout="5000" />
    
    • 指定接口以及特定方法超时配置:
    <dubbo:reference interface="com.foo.BarService" timeout="2000">
    		<dubbo:method name="sayHello" timeout="3000" />
    dubbo:reference>
    
  • 服务端

    • 全局超时配置:
    <dubbo:provider timeout="5000"/>
    
    • 指定接口以及特定方法超时配置:
    <dubbo:provider interface="com.foo.BarService" timeout="2000">
    	<dubbo:method name="sayHello" timeout="3000" />
    dubbo:provider>
    

4.2、失败重试

  • 当出现失败,会自动重试其它服务器,重试次数(不含第一次)

    • 服务端:
    <dubbo:service retries="2"/>
    
    • 消费端:
    <dubbo:reference retries="2"/>
    
  • 注意:两端配置其一即可!

4.3、版本号

  • 方便接口升级,不影响老版本接口,对接口增加版本号

  • 服务端:

    <dubbo:service version="1.0.0"/>
    
  • 消费端:

    <dubbo:reference version="1.0.0"/>
    
  • 注意:两者之间只要version号相同时才可以调用!!!

4.4、负载均衡

  • dubbo负载均衡策略
<dubbo:service  interface="..."  loadbalance="roundrobin"/>
  • 参数:loadbalance 可选值
    • Random 随机调用(默认策略)
    • RoundRobin 轮循,按公约后的权重设置轮循比率
    • LeastActive 最小活跃调用数,对于响应快的优先调用
    • ConsistentHash 一致性HASH:相同参数的请求总发送到同一提供者,当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者

4.5、启动服务检查

  • 启动时会检查所依赖的服务是否正常,如果不正常,则启动报错,默认为true.当出现相互依赖时,当设置为false
<dubbo:reference cheack="true">
  • 在consumer上配置表示如果启动时没有服务提供者,会报错
<dubbo:consumer cheack="true">
  • 在registry上配置表示如果启动时连接不上注册中心会报错
<dubbo:registry cheack="true">

4.6、多协议

  • dubbo可支持的协议
    • dubbo RMI hessian webservice http thrift

4.7、多注册中心支持

  • 配置多个注册中心
<dubbo:registry id="one" protocol="zookeeper" address="127.0.0.1:2181"/>
<dubbo:registry id="two" protocol="zookeeper" address="127.0.0.2:2181"/>
  • 为服务指定注册中心
<dubbo:service interface="com.dgc.learn.service.UserService" ref="userServiceImpl" registry="one"/>

4.8、异步调用

  • 配置接口异步返回
<dubbo:service async="true">
  • 但是hessian协议,使用async异步回调会报错!!!

4.9、只订阅/只注册

  • 不向注册中心注册,只订阅
<dubbo:registry register="false">
  • 不向注册中心订阅,只注册
<dubbo registry subscribe="false">

五、集群容错

  • Failover Cluster 失败切换(缺省):当出现失败,重试其它服务器。通常用于读操作,可通过retries="num"来设置重试次数。
  • Failfast Cluster 快速失败:只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
  • Failsafe Cluster 失败安全:出现异常时,直接忽略。通常用于写入审计日志等操作。
  • Failback Cluster 失败恢复:后台记录失败请求,定时重发。通常用于消息通知操作。
  • Forking Cluster 并行调用:只要一个成功即返回。通常用于实时性要求较高的读操作,可通过forks="2"来设置最大并行数。
  • Broadcast Cluster 广播调用:逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。

六、配置优先级

  • dubbo所有配置的优先级顺序
    • refrence method > service method > refrence > service > consumer > provider
  • 核心是:局部覆盖外部,消费端覆盖提供端

七、配置模板

  • 服务端模板:

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans.xsd
          http://dubbo.apache.org/schema/dubbo
          http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
 	<dubbo:application name="提供端服务名称" default="true"/>
    <dubbo:registry id="register" address="注册地址1"  file="注册接口缓存的服务器目录"/>
    <dubbo:registry id="auth" address="注册地址2" file="注册接口缓存的服务器目录"/>
    <dubbo:protocol name="通信规则名称" port="通信端口" threads="线程数量"  payload="接口传输流量上限"/>
    
    <dubbo:registry cheack="true">

    
    <dubbo:service interface="cn.com.dgc.service.WebServiceBiz"
                   ref="webServiceBiz" retries="0" timeout="60000" 				                        registry="register" async="false"
                   version="1.0.0"
                   />
beans>
  • 消费端模板:

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans.xsd
          http://dubbo.apache.org/schema/dubbo
          http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <dubbo:application name="消费端服务名称" default="true"/>
    <dubbo:registry id="register" address="注册地址1"/>
    <dubbo:registry id="logger" address="注册地址2"/>
    <dubbo:protocol  name="通信规则名称"/>
		
    <dubbo:reference registry="register"interface="cn.com.dgc.service.WebServiceBiz"
                     id="webServiceBiz" check="false" timeout="60000"/>
beans>





你可能感兴趣的:(组件管理,dubbo,java,分布式)