dubbo相关

Dubbo在启动时,provider会监听Spring容器事件,通过Zookeeper注册服务。export()方法包括URL装配、协议暴露和服务注册。consumer则在zk中注册,并创建监听器感知服务变更。当provider下线,zk的心跳检测机制会发现并通知consumer更新服务列表,确保高可用。consumer从缓存或zk获取provider列表,进行远程调用,可选负载均衡。
摘要由CSDN通过智能技术生成

https://www.jianshu.com/p/2c9a5d9fbf85
1.对于provider,dubbo会监听Spring容器的启动刷新事件(ContextRefreshedEvent),调用export()方法暴露服务。在使用zk作为注册中心的前提下,export()方法按顺序做下面3件事。

URL装配:读取provider端配置,根据约定好的协议将服务装配成URL的形式
协议暴露:所谓协议暴露,简单来说就是先创建NettyServer,然后给每个URL创建一个本地方法的代理,并将二者映射起来,NettyServer接收请求会调用对应的本地方法
向zk注册节点:将装配好的URL通过zkClient注册到zk节点中,完成服务的暴露
对于consumer,dubbo根据consumer侧的配置选择订阅provider的某几个服务。

2.订阅操作包含两个动作:

一是consumer本身在zk的consumer节点下注册;
二是创建监听器来感知zk节点的变化。
provider上下线时会引起对应zk节点的变化,监听器感知到节点变化后,会调用NotifyListener的notify方法,更新内存中的provider列表;

与此同时,consumer还会将最新的provider列表写入~/.dubbo目录下的文件中,这样做可以保证在zk挂掉的情况下,consumer依然能通过本地的缓存文件找到provider的地址。

拿到provider列表后,接下来consumer就可以根据约定好的协议进行远程调用了,当然在这一步还可以做负载均衡。
3.provider服务下线后,注册中心和consumer如何感知到:
zookeeper提供了“心跳检测”功能,它会定时向各个服务提供者发送一个请求(实际上建立的是一个 socket 长连接),如果长期没有响应,服务中心就认为该服务提供者已经“挂了”,并将其剔除。

服务消费方会监听zookeeper相应的路径,一旦路径上的数据有任何的变化,zookeeper就会将新的服务列表发送给消费方,消费方在获取到数据后,刷新本地缓存的列表。
————————————————
版权声明:本文为CSDN博主「dreamcasher」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28411869/article/details/95198290

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值