配置补充

来源:互联网 发布:tv看电视直播软件 编辑:程序博客网 时间:2024/05/18 00:23

张同学分享会时讲了几个主要Dubbo的配置项,我总结的不太清晰,现在补充下

 

Dubbo配置

Connection 连接控制:

限制服务器端接受的连接不能超过10个:(以连接在Server上,所以配置在Provider上)

<dubbo:providerprotocol="dubbo" accepts="10" />

限制客户端服务使用连接数:(如果是长连接比如Dubbo协议,connections表示该服务对每个提供者建立的长连接数)   <dubbo:reference interface="com.foo.BarService"connections="10" />

 

cluster集群容错

集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重试

1)AvailableCluster: 获取可用的调用。遍历所有Invokers判断Invoker.isAvalible,只要一个有为true直接调用返回,不管成不成功

2)BroadcastCluster: 广播调用。遍历所有Invokers,逐个调用每个调用catch住异常不影响其他invoker调用

3)FailbackCluster: 失败自动恢复,对于invoker调用失败, 后台记录失败请求,任务定时重发, 通常用于通知

4)FailfastCluster: 快速失败,只发起一次调用,失败立即保错,通常用于非幂等性操作

5)FailoverCluster: 失败转移,当出现失败,重试其它服务器,通常用于读操作,但重试会带来更长延迟

 

loadbalance负载均衡

在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用

Random:随机,按权重设置随机概率。

RoundRobin:轮循,按公约后的权重设置轮循比率。

LeastActive:最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。

ConsistentHash:一致性Hash,相同参数的请求总是发到同一提供者。

 

stub&mock

stub本地存根

远程服务后客户端通常只剩下接口而实现全在服务器端但提供方有些时候想在客户端也执行部分逻辑比如ThreadLocal缓存提前验证参数调用失败后伪造容错数据等等此时就需要在API中带上Stub客户端生成Proxy会把Proxy通过构造函数传给Stub然后把Stub暴露组给用户,Stub可以决定要不要去调Proxy

<dubbo:serviceinterface="com.foo.BarService" stub="true" />

比如这样的情况:

public class BarServiceStub implements BarService {

    private final BarServicebarService;

     // 构造函数传入真正的远程代理对象

    public (BarService barService){

        this.barService= barService;

    }

 

    public String sayHello(Stringname) {

        // 此代码在客户端执行

        // 你可以在客户端做ThreadLocal本地缓存,或预先验证参数是否合法,等等

        try {

            returnbarService.sayHello(name);

        }catch (Exception e) {

            //你可以容错,可以做任何AOP拦截事项

            return"容错数据";

        }

    }

}

 

关于stub的概念介绍:

存根类是一个类,它实现了一个接口,但是实现后的每个方法都是空的。当我们创建一个指定各种方法集合的接口时,我们可以考虑使用"存根”STUB,“存根”就是用空方法体实现该接口中所有方法的类,这样我们就可以通过继承该“存根”创建一个实现该接口的类,这样一来,该类只需重写对应用比较有重要的几个方法即可

http://www.cnblogs.com/cy163/archive/2009/08/04/1539077.html

mock 本地伪装
Mock
通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过Mock数据返回授权失败。

<dubbo:serviceinterface="com.foo.BarService" mock="true" />

Mock是Stub的一个子集,便于服务提供方在客户端执行容错逻辑

http://blog.csdn.net/chengl04/article/details/39346735

 

filter&listener拦截器和监听器

filter用来在远程调用真正执行的前后加入一些逻辑,跟aop的拦截器servlet中filter概念一样的

详见http://blog.csdn.net/quhongwei_zhanqiu/article/details/41651659

listener

dubbo在服务暴露(exporter)以及销毁暴露(unexporter)服务的过程中提供了回调窗口,供用户做业务处理。服务在暴露过程中构建了监听器链

 

init初始化配置

启动时检查Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true。

引用缺省是延迟初始化的,只有引用被注入到其它Bean,或被getBean()获取,才会初始化。
如果需要饥饿加载,即没有人引用也立即生成动态代理,可以配置:

<dubbo:reference interface="com.foo.BarService"init="true" />

http://www.tuicool.com/articles/z6BzIn7

 

threadpool线程池

fixed 固定大小线程池,启动时建立线程,不关闭,一直持有。(缺省)

cached 缓存线程池,空闲一分钟自动删除,需要时重建。

limited 可伸缩线程池,但池中的线程数只会增长不会收缩。(为避免收缩时突然来了大流量引起的性能问题)。

 

heartbeat:

心跳检测,配置中心和每个Server/Client之间会作一个实时的心跳检测(因为它们都是建立的Socket长连接)心跳间隔,对于长连接,当物理层断开时,比如拔网线,TCP的FIN消息来不及发送,对方收不到断开事件,此时需要心跳来帮助检查连接是否已断开

 

参考dubbo官方配置文档:

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E9%85%8D%E7%BD%AE%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C

张同学分享会时讲了几个主要Dubbo的配置项,我总结的不太清晰,现在补充下

 

Dubbo配置

Connection 连接控制:

限制服务器端接受的连接不能超过10个:(以连接在Server上,所以配置在Provider上)

<dubbo:providerprotocol="dubbo" accepts="10" />

限制客户端服务使用连接数:(如果是长连接比如Dubbo协议,connections表示该服务对每个提供者建立的长连接数)   <dubbo:reference interface="com.foo.BarService"connections="10" />

 

cluster集群容错

集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重试

1)AvailableCluster: 获取可用的调用。遍历所有Invokers判断Invoker.isAvalible,只要一个有为true直接调用返回,不管成不成功

2)BroadcastCluster: 广播调用。遍历所有Invokers,逐个调用每个调用catch住异常不影响其他invoker调用

3)FailbackCluster: 失败自动恢复,对于invoker调用失败, 后台记录失败请求,任务定时重发, 通常用于通知

4)FailfastCluster: 快速失败,只发起一次调用,失败立即保错,通常用于非幂等性操作

5)FailoverCluster: 失败转移,当出现失败,重试其它服务器,通常用于读操作,但重试会带来更长延迟

 

loadbalance负载均衡

在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用

Random:随机,按权重设置随机概率。

RoundRobin:轮循,按公约后的权重设置轮循比率。

LeastActive:最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。

ConsistentHash:一致性Hash,相同参数的请求总是发到同一提供者。

 

stub&mock

stub本地存根

远程服务后客户端通常只剩下接口而实现全在服务器端但提供方有些时候想在客户端也执行部分逻辑比如ThreadLocal缓存提前验证参数调用失败后伪造容错数据等等此时就需要在API中带上Stub客户端生成Proxy会把Proxy通过构造函数传给Stub然后把Stub暴露组给用户,Stub可以决定要不要去调Proxy

<dubbo:serviceinterface="com.foo.BarService" stub="true" />

比如这样的情况:

public class BarServiceStub implements BarService {

    private final BarServicebarService;

     // 构造函数传入真正的远程代理对象

    public (BarService barService){

        this.barService= barService;

    }

 

    public String sayHello(Stringname) {

        // 此代码在客户端执行

        // 你可以在客户端做ThreadLocal本地缓存,或预先验证参数是否合法,等等

        try {

            returnbarService.sayHello(name);

        }catch (Exception e) {

            //你可以容错,可以做任何AOP拦截事项

            return"容错数据";

        }

    }

}

 

关于stub的概念介绍:

存根类是一个类,它实现了一个接口,但是实现后的每个方法都是空的。当我们创建一个指定各种方法集合的接口时,我们可以考虑使用"存根”STUB,“存根”就是用空方法体实现该接口中所有方法的类,这样我们就可以通过继承该“存根”创建一个实现该接口的类,这样一来,该类只需重写对应用比较有重要的几个方法即可

http://www.cnblogs.com/cy163/archive/2009/08/04/1539077.html

mock 本地伪装
Mock
通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过Mock数据返回授权失败。

<dubbo:serviceinterface="com.foo.BarService" mock="true" />

Mock是Stub的一个子集,便于服务提供方在客户端执行容错逻辑

http://blog.csdn.net/chengl04/article/details/39346735

 

filter&listener拦截器和监听器

filter用来在远程调用真正执行的前后加入一些逻辑,跟aop的拦截器servlet中filter概念一样的

详见http://blog.csdn.net/quhongwei_zhanqiu/article/details/41651659

listener

dubbo在服务暴露(exporter)以及销毁暴露(unexporter)服务的过程中提供了回调窗口,供用户做业务处理。服务在暴露过程中构建了监听器链

 

init初始化配置

启动时检查Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true。

引用缺省是延迟初始化的,只有引用被注入到其它Bean,或被getBean()获取,才会初始化。
如果需要饥饿加载,即没有人引用也立即生成动态代理,可以配置:

<dubbo:reference interface="com.foo.BarService"init="true" />

http://www.tuicool.com/articles/z6BzIn7

 

threadpool线程池

fixed 固定大小线程池,启动时建立线程,不关闭,一直持有。(缺省)

cached 缓存线程池,空闲一分钟自动删除,需要时重建。

limited 可伸缩线程池,但池中的线程数只会增长不会收缩。(为避免收缩时突然来了大流量引起的性能问题)。

 

heartbeat:

心跳检测,配置中心和每个Server/Client之间会作一个实时的心跳检测(因为它们都是建立的Socket长连接)心跳间隔,对于长连接,当物理层断开时,比如拔网线,TCP的FIN消息来不及发送,对方收不到断开事件,此时需要心跳来帮助检查连接是否已断开

 

参考dubbo官方配置文档:

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E9%85%8D%E7%BD%AE%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C

原创粉丝点击