Dubbo-------配置篇

本文介绍了Dubbo的配置原则,包括-D参数优先、XML配置次之、Properties作为缺省值。详细讲解了启动时检查、超时、重试次数、多版本控制和本地存根等常用配置,帮助理解并优化Dubbo服务的运行效果。
摘要由CSDN通过智能技术生成

Dubbo-------配置篇

具体的dubbo配置信息可以参考dubbo的官方文档:

       dubbo官方文档

目录

Dubbo-------配置篇

1、配置原则

2、常用的一些配置


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的形式传递给消费者端。

dubbo-config-override

建议提供者为每个服务设置一个超时,因为提供者确切地知道方法需要执行多长时间。如果使用者同时引用多个服务,则无需关心每个服务的超时设置。

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通过构造函数传递给,然后可以在存根实现代码中实现逻辑。

/user-guide/images/stub.jpg

 

在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";
        }
    }
}
  1. 存根必须具有可以传入代理的构造函数。

  2. BarServiceStub实现BarService,它具有在远程BarService实例中传递的构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值