Duboo的配置
启动时检查
因为在前面我们发现如果我们在使用服务消费者时候没有找到指定的消费提供者
此时会出现异常
默认我们在启动的时候就会检查消费者和提供者之间的调用
我们可以通过配置,在启动的时候不去检查,而是在调用的时候进行检查
报出异常:没有提供者
关闭启动时不检查
<!--引入接口作为连接-->
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<!-- check在启动是关闭检查 但是调用的时候会进行检查 -->
<dubbo:reference id="userService" interface="cn.Dao.UserDao"
check="false"></dubbo:reference>
全局的启动时不检查
因为上面只能做到指定具体的一个启动时候不检查,Duboo的有着一些全局配置
<!--表示当前的所有消费者服务都不检查-->
<duboo:consumer check="false"/>
检查注册中心是否存在
zookeeper就是一个注册中心
<!--检查注册中心(zookeeper)-->
<!--当注册中心不存在时候是否报错-->
<dubbo:registry check="false"/>
超时设置
在服务消费者调用服务提供者,可能由于网络原因,服务提供者的方法执行速度过慢,我们超时采取的处理,避免阻塞
duboo的默认超时设置
可以通过自定义全局的超时时间
<!--在duboo中存在默认的超时时间-->
<!--单位是毫秒-->
<duboo:consumer timeout="1000"/>
也同样存在局部和全局,上面展示的是全局
duboo的局部设置超时
<dubbo:reference id="userService" interface="cn.Dao.UserDao"
check="false" timeout="指定一个提供者的超时时间">
<dubbo:method name="提供者中的方法" timeout="指定方法超时时间"></dubbo:method>
</dubbo:reference>
一个类中包含多个方法
可以指定具体类的具体方法,做到优先级
全局<局部<方法
在服务提供者中设置,可以不在服务消费之中指定超时时间
消费者的优先级大于提供者的优先级
<!--在Duboo的服务提供者超时设置-->
<dubbo:service interface="cn.Dao.UserDao" ref="UserDaoImple" timeout="1000" />
优先级别
重试次数
当我们调用服务超时,我们可以通过重试次数来进行设置,重新调用多少次
比如在提供者方法执行需要3秒,消费者设置超时为1秒,那么就会进行重新调用,进项选择其他的提供者方法进行调用
重试次数不算第一次,重试=3,加上第一次=4
<!--使用retries来指定次数-->
<dubbo:reference id="userService" interface="cn.Dao.UserDao"
retries="3">
</dubbo:reference>
注意对于增删改可以使用重试次数,新增不适用重试次数
多版本
使用version的属性可以在(提供者)(消费者)之间进行设置
消费之和提供者都存在一个与注册中心联系的标签
可以在提供者中设置版本号
<!--可以在提供者中指定版本号-->
<!--在消费者中也引入指定版本号,可以进行版本的控制-->
<!--一个接口多个实现类对于实现类就可以使用版本来进行区分-->
<dubbo:service interface="cn.Dao.UserDao" ref="0UserDaoImple" version="1.0.0" />
可以在消费者中进行引用版本号
<!--在调用者中该标签的version属性可以指定提供者版本号-->
<dubbo:reference id="userService" interface="cn.Dao.UserDao"
version="1.0.0" >
</dubbo:reference>
消费者的属性 version="*"可以进行随机匹配
本地存根
远程服务调用,客户端一般只存在接口,具体的实现在其他的服务器中。
但是提供的方法,有些时候想在客户端进行判断,执行部分逻辑。(比如检验传入参数是否正确)
就需要使用本地存根:消费者可以在调用提供者方法之前,执行部分代码,判断传入参数是否正确等操作
如何使用本地存根
实现接口,重写方法中进行在调用者方法前执行部分功能
在 spring 配置文件中按以下方式配置:
<dubbo:service interface="com.foo.BarService" stub="true" />
或
<dubbo:service interface="com.foo.BarService" stub="com.foo.BarServiceStub" />
提供stub的实现
package com.foo;
//实现接口重写方法,
//使用私有属性和带参构造函数,可以引入远程代理的对象(提供者的方法)
//在重写方法中先去编写执行前的代码,在调用提供者的方法
public class BarServiceStub implements BarService {
//私有属性
private final BarService barService;
// 构造函数传入真正的远程代理对象
public BarServiceStub(BarService barService){
this.barService = barService;
}
public String sayHello(String name) {
// 此代码在客户端执行, 你可以在客户端做ThreadLocal本地缓存,或预先验证参数是否合法,等等
try {
return barService.sayHello(name);
} catch (Exception e) {
// 你可以容错,可以做任何AOP拦截事项
return "容错数据";
}
}
}
- Stub 必须有可传入 Proxy 的构造函数。
- 在 interface 旁边放一个 Stub 实现,它实现 BarService 接口,并有一个传入远程 BarService 实例的构造函数
SpringBoot配置Duboo的三种方式
- 导入依赖,编写yml配置文件,使用注解@Service,@EnableDuboo,@reference
- 导入依赖,写XML配置文件,使用@ImportResource进行导入配置文件
- 导入Duboo的注解API依赖,使用配置类进行配置
以上三种都是SpringBoot的配置方式
Service 实例的构造函数
SpringBoot配置Duboo的三种方式
- 导入依赖,编写yml配置文件,使用注解@Service,@EnableDuboo,@reference
- 导入依赖,写XML配置文件,使用@ImportResource进行导入配置文件
- 导入Duboo的注解API依赖,使用配置类进行配置
以上三种都是SpringBoot的配置方式