Dubbo注册中心原理

       Dubbo的注册中心有好多种,包括Multicast(广播协议)、Zookeeper、Redis、Simple等。Dubbo官方推荐使用Zookeeper注册中心。如需了解Dubbo使用,请移步:Dubbo实例快速上手

1.基于ZooKeeper解析Dubbo注册中心实现原理

    ①当服务端启动完成后,会在ZooKeeper上注册到/dubbo这个节点下;

    ②消费端,在xml中配置<dubbo:reference>远程服务调用,如果改地址发生变化,都会去通过watch监听/dubbo节点下的该接口名的节点变化;

    ③消费端访问服务端时,会拿到该节点下的所有子节点,当子节点发生变化时,Watch监听会通知给消费端。消费端此时拿到服务端注册在ZooKeeper中的节点地址信息列表,然后根据地址列表对应的服务去发布。如果服务端采用的是集群,那么消费端在得到该服务的过程中,就会通过负载均衡的算法来完成具体的调用过程,Dubbo会对这个地址做负载均衡算法,最后选择一个可用的地址,然后发起调用(如图所示)

2.注册中心缓存机制

    现在,我们会有如下一些问题:

           ①消费端每次在调用服务之前,都必须先去访问zookeeper,拿到服务地址,然后再去调用服务,这样会严重影响性能;

           ②如果ZooKeeper宕机,又该怎么办?(ZooKeeper集群除外)

        Dubbo已经为我们考虑到了这些情况,所以Dubbo为注册中心引入了缓存机制。当消费端在获得注册中心信息后,会将服务地址缓存至本地。我们需要在消费端注册中心,使用file属性,进行自定义地址配置。配置如下:

<dubbo:registry address="zookeeper://192.168.204.201:2181" file="D:/dubbo-server"/>

       当启动完成后,我们便能够在配置的路径下,看到当前服务对应的地址信息文件。如果zookeeper挂掉之后,它便会直接从本地缓存去拿注册中心地址,从而避免整个服务都受牵连。

缓存信息内容如下:

#Dubbo Registry Cache
#Thu Aug 01 16:16:33 CST 2019
com.test.dubbo.ISayHello=empty\://192.168.41.126/com.test.dubbo.ISayHello?application\=dubbo-client&category\=configurators&check\=false&dubbo\=2.0.2&interface\=com.test.dubbo.ISayHello&methods\=sayHello&owner\=test&pid\=305488&release\=2.7.0&revision\=1.0-SNAPSHOT&side\=consumer&timestamp\=1564647392165 empty\://192.168.41.126/com.test.dubbo.ISayHello?application\=dubbo-client&category\=routers&check\=false&dubbo\=2.0.2&interface\=com.test.dubbo.ISayHello&methods\=sayHello&owner\=test&pid\=305488&release\=2.7.0&revision\=1.0-SNAPSHOT&side\=consumer&timestamp\=1564647392165 dubbo\://192.168.41.126\:20880/com.test.dubbo.ISayHello?anyhost\=true&application\=dubbo-server&bean.name\=com.test.dubbo.ISayHello&dubbo\=2.0.2&generic\=false&interface\=com.test.dubbo.ISayHello&methods\=sayHello&owner\=test&pid\=300832&release\=2.7.0&side\=provider&timestamp\=1564634218870

END 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值