Dubbo_特性2

一、启动服务检查

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>

@Autowired
	IOrderServices 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" />


十二、配置的优先级

总体:客户端优于服务端

如下:




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值