Dubbo_特性2
来源:互联网 发布:淘宝我的购物车打不开 编辑:程序博客网 时间:2024/06/10 10:25
一、启动服务检查
1、dubbo:renference 的属性check默认为true,即默认会检查服务的依赖服务是否启动,当在服务之前是循环依赖的时候,则需要设置为false;
2、dubbo:consumer 的check=false,则检查没有服务提供者则会报错
3、dubbo:register的check=false,则注册订阅失败则会报错
二、多协议支持
dubbo支持的协议有:dubbo、rmi、hessian、webservice、http、thrift
由于项目在改造的时候可能需要支持多个系统的协议,或者多种语言组成的项目,则需要服务本身支持所协议,
则只需要在服务中定义多个 <dubbo:protocal name="dubbo" port="20880" server="jetty" /> <dubbo:protocal name="hessain" port="20881" server="jetty" />
并在在服务<dubbo:service interface="com.gupao.vip.mic.dubbo.order.IOrderServices" ref="orderService" /> 中添加 protocal="hessain" 指明支持的协议,
支持多个协议,中间使用逗号隔开即可。
当查看源码时候,发现只是使用多个协议,在循环中初始化暴露多个地址,当然可以在zookeeper的注册中心节点下清晰的看见。
三、多注册中心支持
比如有需求,不同的服务注册到不同的注册中心,可能完全隔离,只需要在<dubbo:registry protocal="zookeeper" address="192.168.1.1:2181,192.168.1.2:2181"/>
多个该配置中添加id属性进行区分即可。在dubbo:service 中显示指定 regiatry=“注册中心的ID”即可。
四、多版本支持
该功能可能在项目中会经常使用,比如,由于业务调整后接口逻辑等变化,在需要支持不同的版本调用不同版本的接口,则不需要要在同一个接口中
去完全兼容所以的版本,做很多的判断,后期会很难维护。
则需要在
<dubbo:service interface="com.gupao.vip.mic.dubbo.order.IOrderServices" ref="orderService" version=“3.8.7” />
<dubbo:service interface="com.gupao.vip.mic.dubbo.order.IOrderServices" ref="orderService2" version=“4.0.0” /> 中进行区别,
并且在调用端的接口调用中使用version属性进行说明即可。
同样在zookeeper注册中心中,可以看见他会为每一个版本生成一个url。
五、异步调用
这个也是经常会使用的场景(只有dubbo协议支持异步调用,并且是使用jdk的future实现),需要将客户端(客户端实现)的dubbo:renference 中添加async=“true”, 或在其中加入方法的子标签
<!--生成一个远程服务的调用代理--> <dubbo:reference id="orderServices" interface="com.kevin.dubbo.order.IOrderServices"> <dubbo:method name="doOrder" async="true" /> </dubbo:reference>
@AutowiredIOrderServices orderServices;public void doTest(String str) {orderServices.doOrder(str);Future<Object> future = RpcContext.getContext().getFuture();System.out.println("阻塞中");Object obj = future.get(); //处于阻塞状态(obj可强转为对象)System.out.println(obj); }如图:
六、主机绑定
首先会从服务提供者的<dubbo:protocol name="dubbo" port="20880" host="192.168.1.1" /> (只能绑定一个地址)中去拿,否则再从注册中心等去获取。
判断逻辑大致如下:
1、通过配置文件进行获取
2、通过sockket到到注册中心去拿
3、使用网络接口进行获取
if (NetUtils.isInvalidLocalHost(host)) { anyhost = true; try { host = InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { logger.warn(e.getMessage(), e); }if (NetUtils.isInvalidLocalHost(host)) { if (registryURLs != null && registryURLs.size() > 0) { for (URL registryURL : registryURLs) { try { Socket socket = new Socket(); try { SocketAddress addr = new InetSocketAddress(registryURL.getHost(), registryURL.getPort()); socket.connect(addr, 1000); host = socket.getLocalAddress().getHostAddress(); break; } finally { try { socket.close(); } catch (Throwable e) {} } } catch (Exception e) { logger.warn(e.getMessage(), e); } } } if (NetUtils.isInvalidLocalHost(host)) { host = NetUtils.getLocalHost(); }}
七、dubbo服务只订阅
服务本身很多时候即使调用方,也是服务提供方
场景:由于我们很多时候需要服务本身只是连接到服务中心,并能调用其他的服务,调试自己的服务等。就需要服务本身为只订阅。
实现:<dubbo:registry protocal="zookeeper" address="192.168.1.1:2181,192.168.1.2:2181" register="false" />
八、dubbo服务只注册
实现: <dubbo:registry protocal="zookeeper" address="192.168.1.1:2181,192.168.1.2:2181" subscribe="false" />
九、负载均衡
常见的负载均衡都有:
1、random :按照默认设置的权重比例后的随机,默认为随机。
2、roundrobin:按照默认设置的权重比再进行轮询
3、leastactive:最少活跃次数
4、consistenthash:一致性哈希,相通的访问ip会落到同一节点上
使用 : <dubbo:service interface="..." loadbalance="roundrobin" />
十、链接超时
<dubbo:service interface="com.kevin.dubbo.order.IOrderServices" ref="orderService" tineout=“2000” />
十一、集群容错
failover cluster:根据负载均衡机制,失败后重试其他服务,通过retries=“2” 设置重试次数,表示总次数为3次(默认已设置)
failfaster cluster:只发起一次操作,快速失败,(比如新增一条用户信息,非幂等请求)
failsafe cluster:失败安全,出现失败时直接忽略异常,常用场景为,日志记录
failback cluster:失败自动恢复,后台记录失败请求,定时重发
forking cluster:并行调用多个服务,只要有一个返回成功,则成功,用于只读情况。
使用:<dubbo:reference id="orderService" interface="com.kevin.dubbo.order.IOrderServices" cluster="failfaster" />
十二、配置的优先级
总体:客户端优于服务端
如下:
- Dubbo_特性2
- Dubbo_特性1
- Dubbo_入门
- dubbo_初识DUBBO
- dubbo_信息交换Exchanger
- dubbo_网络传输transport
- dubbo_ Linux安装配置
- dubbo_远程同步调用原理
- Dubbo_服务化改造注意事项
- dubbo_负载均衡算法_一致性算法
- WebService(2)-AXIS高级特性 Handler特性
- spark 2.0.0特性 1.6.2特性
- Dubbo_创建Dubbo服务并在ZooKeeper注册,然后通过Jar包执行【转】
- Eclipse3.2 新特性
- Eclipse3.2 新特性
- Eclipse3.2 新特性
- Eclipse3.2 新特性
- Eclipse3.2 新特性
- 决策树decision tree+SVM+knn+随机森林+高斯贝叶斯
- Necklace of Beads POJ
- 安卓本地数据库SQLite简单使用
- 装饰模式
- Eclipse环境下如何消除JSTL <c:out>标签出现的”Multiple annotations found at this line“告警
- Dubbo_特性2
- 2017 Multi-University Training Contest
- sc2017新高二&高一模拟赛9 总结
- HDU 6172-Array Challenge
- 红黑树
- 图结构练习——最短路径
- Spring Boot(二):从Session中获取域对象的三种方法
- Linux解压缩文件,安装文件
- HTML5利用canvas绘制动态信号瀑布图