启动时检查
Dubbo缺省会在启动是检查依赖的服务是否可用,不可用是会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true。
通过check="false"关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。
关闭某个服务的启动时检查
<dubbo:reference interface="com.foo.BarService" check="false" />
关闭所有服务的启动时检查
<dubbo:consumer check="false"/>
关闭注册中心的启动时检查
<dubbo:registry check="false"/>
Dubbo负载均衡配置
Dubbo提供了多种均衡策略,缺省为random随机调用
- Random LoadBalance(随机模式)默认使用这个
随机,按权重设置随机概率。
在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀。 - RoundRobin LoadBalance(轮询模式)
按公约后的权重设置轮询比例。但存在响应慢的服务提供者会累积请求。 - LeastActive LoadBalance(最少活跃调用数)
响应快的提供者接受越多请求,响应慢的接受越少请求。 - ConsistentHash LoadBalance(一致hash)
根据服务提供者ip设置hash环,携带相同的参数总是发送的同一个服务提供者,若服务挂了,则会基于虚拟节点平摊到其他提供者上。
多协议
- 不同服务不同协议
- 多协议暴露服务
多版本
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互之间不引用。
在低压力时间段,先升级一半提供者为新版本,再将所有消费者升级为新版本,然后将剩下的一半提供者升级为新版本。
<dubbo:service interface="com.cloudhouse.dubbo.service.HelloService" version="1.0.0"/>
<dubbo:service interface="com.cloudhouse.dubbo.service.HelloService" version="2.0.0"/>
<dubbo:reference id="helloService1" interface="com.cloudhouse.dubbo.service.HelloService" version="1.0.0"/>
<dubbo:reference id="helloService2" interface="com.cloudhouse.dubbo.service.HelloService" version="2.0.0"/>
不区分版本,随机访问服务提供者的方法:
<dubbo:reference id="helloService" interface="com.cloudhouse.dubbo.service.HelloService" version="*"/>
服务分组
当一个接口有多种实现时,可以用group区分,服务分组是dubbo用来区分相同接口名,但是方法具体实现不同的一种模式。
<dubbo:service interface="com.cloudhouse.dubbo.service.HelloService" group="alipay"/>
<dubbo:service interface="com.cloudhouse.dubbo.service.HelloService" group="wechatPay"/>
<dubbo:reference id="helloService1" interface="com.cloudhouse.dubbo.service.HelloService" group="alipay"/>
<dubbo:reference id="helloService2" interface="com.cloudhouse.dubbo.service.HelloService" group="wechatPay"/>
不区分组,总是只调一个可用组的服务提供者的方法:
<dubbo:reference id="helloService" interface="com.cloudhouse.dubbo.service.HelloService" group="*"/>
令牌验证
- 用途:防止消费者绕过注册中心访问提供者
- 配置:
在服务级别设置:
<!--随机token令牌,使用UUID生成-->
<dubbo:service interface="com.cloudhouse.dubbo.service.HelloService" token="true" />
<!--固定token令牌,相当于密码-->
<dubbo:service interface="com.cloudhouse.dubbo.service.HelloService" token="123456" />