(一)优先级:
1. 配置方式优先级:
- JVM -D参数
- XML
- Properties
2. 配置优先级:
- 方法级优先,接口级次之,全局配置再次之;
- 如果级别一样,则消费方优先,提供方次之。
(二)check(启动时检查):
在启动服务时检查相关服务是否可用;
默认check=true,即启动服务时检查有没有可用服务,如果没有启动时报错;
check=false,启动时不检查,只有在调用时才去检查有没有可用服务,没有则报错。
1. 针对单个服务配置:
<dubbo:reference id="demoService" interface="com.jcx.dubbo.demo.service.IDemoService" check="false"/>
2. 统一设置所有消费者服务配置:
<dubbo:consumer check="false"/>
3. 启动时对注册中心的检查:
注册中心不存在时是否报错,默认check=true
<dubbo:registry check="false"/>
4. dubbo.properties配置:
dubbo.reference.com.jcx.dubbo.demo.service.IDemoService.check=false
dubbo.reference.check=false
dubbo.consumer.check=false
dubbo.registry.check=false
(三)timeout(超时设置):
服务消费者引用提供者在指定时间内没返回,则终止;单位为ms;默认是1000ms。
1. 针对单个服务配置:
<dubbo:reference id="demoService" interface="com.jcx.dubbo.demo.service.IDemoService" timeout="5000"/>
2. 针对具体方法配置:
<dubbo:reference id="demoService" interface="com.jcx.dubbo.demo.service.IDemoService"> <dubbo:method name="sayHello" timeout="3000"/> </dubbo:reference>>
3. 统一设置所有提供者配置:
<dubbo:provider timeout="5000"/>
注:建议超时时间都配置在消费方
(四)retries(重试次数):
不包含第一次调用,若设置retries="3"则共调用4次;
如果提供方存在多个,会调用其他提供者,总数加起来为4次,若调用成功则终止;
<dubbo:reference id="demoService" interface="com.jcx.dubbo.demo.service.IDemoService" retries="3"/>
注:如果为幂等(多次调用结果相同)操作,可配置重试次数,如数据库查询等操作;非幂等操作,则不配置重试次数,如数据库新增等操作。
(五)version(多版本):
provider:
<!--老版本--> <dubbo:service interface="com.jcx.dubbo.demo.service.IDemoService" version="1.0.0"/> <!--新版本--> <dubbo:service interface="com.jcx.dubbo.demo.service.IDemoService" version="2.0.0"/>
consumer:
<!--调用老版本--> <dubbo:reference id="demoService" interface="com.jcx.dubbo.demo.service.IDemoService" version="1.0.0"/> <!--调用新版本--> <dubbo:reference id="demoService" interface="com.jcx.dubbo.demo.service.IDemoService" version="2.0.0"/> <!--不区分版本,随机调用--> <dubbo:reference id="demoService" interface="com.jcx.dubbo.demo.service.IDemoService" version="*"/>
(六)stub(本地存根):
服务消费者对调用真正实现之前对参数进行验证或者缓存等操作,判断是否满足要求再做调用
本地存根代码实现:
import com.jcx.dubbo.demo.service.IDemoService; import org.springframework.util.StringUtils; /** * 本地存根实现类 */ public class DemoServiceStubImpl implements IDemoService { private final IDemoService demoService; /** * 必须要有有参构造,传入真正的远程代理对象 * * @param demoService 远程代理对象 */ public DemoServiceStubImpl(IDemoService demoService) { super(); this.demoService = demoService; } public String sayHello(String userName) { if (!StringUtils.isEmpty(userName)) { return demoService.sayHello(userName); } return null; } }
配置:
<dubbo:reference id="demoService" interface="com.jcx.dubbo.demo.service.IDemoService" stub="com.jcx.dubbo.demo.service.impl.DemoServiceStubImpl"/>