回顾
上一篇和上上篇我们分别讲了Springboot整合Dubbo和单机版的Dubbo,基本上Dubbo这个技术的主干已经讲完了,还剩下一些边边角角,我们今天来说一下
启动时检查
- Dubbo默认情况下会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=“true”。
- 关闭某个服务的启动时检查-消费者
<dubbo:reference id="helloService" check="false" interface="com.etoak.service.HelloService">
</dubbo:reference>
- 关闭所有服务的启动检查-消费方
<dubbo:consume rcheck="false"/>
- 关闭注册中的启动检查-消费方和提供方
<dubbo:registry address="zookeeper://127.0.0.1:2181" check="false"/>
配置加载流程(配置来源)
此篇文档主要讲在应用启动阶段,Dubbo框架如何将所需要的配置采集起来(包括应用配置、注册中心配置、服务配置等),以完成服务的暴露和引用流程。
- 配置来源JVM System Properties,
- -D参数Externalized Configuration,
- 外部化配置ServiceConfig、
- ReferenceConfig等编程接口采集的配置、
- Spring配置本地配置文件dubbo.properties,配置在classpath根目录(写在src/main/resources)
配置流程配置加载的优先级
jvm参数>外部化配置>编程接口,Spring配置>dubbo.properties
XML配置-不同粒度配置的覆盖关系
- 方法级优先,接口次之,全局最差
- 相同优先级,消费者优于提供者
直连
在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连;点对点直连方式,以服务接口为单位,忽略注册中心的提供者列表,A接口配置点对点,不影响B接口从注册中心获取列表。
<dubbo:reference id="helloService"
url="dubbo://127.0.0.1:20880"
interface="com.etoak.service.HelloService">
<dubbo:method name="hello"/>
</dubbo:reference>
本地存根
本地存根和本地伪装就是在消费方部署一个实现了目标接口的伪服务。用于在调用真正服务之前,之后的处理工作。其职能有点类似于Spring 的AOP。
首先要一个实现服务接口的Stub类,必须写构造方法,参数传入真正的接口实现类
public class UserServiceStub implements UserService {
private UserService userService;
public UserServiceStub(UserService userService) {
this.userService = userService;
}
@Override
public User getUser(int id) {
System.out.println("本地存根");
return userService.getUser(id);
}
}
在消费者引入服务@Reference
@Reference(stub = "com.etoak.UserServiceStub")//由Stub
服务分组
应用于一个接口有多个实现类的场景,需要分组去是实现
提供端:
<dubbo:service ref="helloService"
group="service"
interface="com.etoak.service.HelloService">
</dubbo:service>
<bean id="helloService"
class="com.etoak.service.impl.HelloServiceImpl"/>
<dubbo:service ref="helloService2"
group="service2"
interface="com.etoak.service.HelloService"></dubbo:service>
<bean id="helloService2"
class="com.etoak.service.impl.HelloServiceImpl2"/>
消费方
<dubbo:reference id="helloService" group="service2" interface="com.etoak.service.HelloService">
</dubbo:reference>
或者
@Reference(group="service2")
负载均衡
假如同一个服务有多台服务器部署在Dubbo上了,同一时间调用该服务的的消费者数量很大,那么Dubbo会自动的去分配如何去调度,达到效率最大化,默认有如下几种负载均衡的策略
- 随机,会动态调整提供者的权重,保证分配均匀
- 轮询,循环访问
- 最小活跃调用数
- 一致性
服务降级
在控制台可以控制,比如消费方调用某个服务出现异常,我们可以设置返回null,而不去抛异常让程序正常走下去,这样有利于保证程序的稳定性
总结
Dubbo完结