Dubbo-------配置篇
具体的dubbo配置信息可以参考dubbo的官方文档:
目录
1、配置原则
官方文档规定,配置生效的顺序:
JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效。
Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。
2、常用的一些配置
2.1 启动时检查
默认情况下,dubbo将在启动时检查相关服务是否可用。当Spring不可用时,它将引发异常以防止Spring完全初始化,以便您可以在发布应用程序之前及早发现问题,默认设置为check=true
。
(1)使用spring配置文件
禁用服务的启动检查
<dubbo:reference interface = "com.foo.BarService" check = "false" />
禁用所有服务的启动检查
<dubbo:consumer check = "false" />
禁用注册中心启动检查(注册订阅失败错误)
<dubbo:registry check="false" />
(2)使用application.proterties
dubbo.reference.com.foo.BarService.check = false
dubbo.reference.check = false
dubbo.consumer.check = false
dubbo.registry.check = false
2.2 超时,配置覆盖关系
由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时)。为了避免超时导致客户端资源(线程)挂起耗尽,必须设置超时时间。
timeout=“1000” 默认超时1000ms。
以超时为例,这是从高到低的优先级(重试,负载平衡,活动对象也应用相同的规则):
- 方法级别,接口级别,默认/全局级别。
- 在同一级别上,消费者比提供者具有更高的优先级
提供者端的配置通过注册表以URL的形式传递给消费者端。
建议提供者为每个服务设置一个超时,因为提供者确切地知道方法需要执行多长时间。如果使用者同时引用多个服务,则无需关心每个服务的超时设置。
2.3 重试次数
失败自动切换,当出现失败,重试其它服务器,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。
所以可以根据业务的需求进行相应的设置。如冥等方法可以设置重试,非冥等一般不设置重试。
重试次数配置如下:
<dubbo:service retries="2" />
或
<dubbo:reference retries="2" />
或
<dubbo:reference>
<dubbo:method name="findFoo" retries="2" />
</dubbo:reference>
2.4 多版本
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
可以按照以下的步骤进行版本迁移:
在低压力时间段,先升级一半提供者为新版本
再将所有消费者升级为新版本
然后将剩下的一半提供者升级为新版本
老版本服务提供者配置:
<dubbo:service interface="com.foo.BarService" version="1.0.0" />
新版本服务提供者配置:
<dubbo:service interface="com.foo.BarService" version="2.0.0" />
老版本服务消费者配置:
<dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" />
新版本服务消费者配置:
<dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" />
如果不需要区分版本,可以按照以下的方式配置:
<dubbo:reference id="barService" interface="com.foo.BarService" version="*" />
或
@Reference(version = "${demo.service.version}" ) private DemoService demoService;
或
@Service(version = "${demo.service.version}")
2.5 本地存根
使用rpc时,客户端通常仅是接口,但有时客户端也希望在客户端中执行部分逻辑。例如:执行ThreadLocal缓存,验证参数,在调用失败时返回模拟数据等。
为了解决这个问题,您可以在API中配置存根,以便客户端生成代理实例时,它将代理Stub
通过构造函数传递给,然后可以在存根实现代码中实现逻辑。
在spring配置文件中配置如下:
<dubbo:service interface="com.foo.BarService" stub="true" />
要么
<dubbo:service interface="com.foo.BarService" stub="com.foo.BarServiceStub" />
提供存根实现
package com.foo;
public class BarServiceStub implements BarService {
private final BarService barService;
// The real remote proxy object is passed in through the constructor
public BarServiceStub(BarService barService){
this.barService = barService;
}
public String sayHello(String name) {
// The following code is executed on the client. You can do local ThreadLocal caching on the client side, or verify parameters, etc.
try {
return barService.sayHello(name);
} catch (Exception e) {
// You can return the mock data.
return "MockData";
}
}
}
-
存根必须具有可以传入代理的构造函数。
-
BarServiceStub实现BarService,它具有在远程BarService实例中传递的构造函数。