配置补充
来源:互联网 发布: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
- 配置补充
- CVSNT配置补充
- STM32 时钟配置补充
- nginx.conf 配置补充
- linux下网卡配置补充
- Struts2入门与配置补充
- solaris配置mysql---补充版本
- 远程事件配置补充说明
- Apache服务器全局配置(补充)
- Hibernate 配置详解(12) 补充
- 关于Hadoop配置的补充
- 【学习笔记】nginx 配置补充
- Spring.xml 标签配置补充
- web.xml配置的一些补充
- python+PyQT+Eric安装配置补充
- 树莓派配置无线网络(补充) 【for_wind】
- 用Properties补充hibernate.cfg.xml配置
- 软件的自动化生成和配置补充
- 关于springboot集成mybatis pageHelper druid 配置
- 前缀、中缀、后缀表达式
- hdu1845
- Redis编程实践 pub/sub
- 训练日记-6
- 配置补充
- CodeForces 343D Water Tree(树链剖分+dfs时间戳)
- Kotlin学习过程 四 Kotlin对Android而言的便利
- JSP基础1
- 矩阵按键(4*4阵列)
- Frogger (弗洛伊德)
- java中的Map以及常用子类
- 杂想
- 51nod 1003 阶乘后面0的数量