基于ZooKeeper和etcd实现服务的注册和发现功能,先讲ZooKeeper。
ZooKeeper
服务注册
利用临时节点的特性,创建一个服务的临时节点,关联服务信息数据,当服务不可用时会话超时,临时节点会被删除,就起到了心跳的作用。
给这个临时节点注册一个
watch
监视数据,不存在了可以及时重新注册服务信息。
服务注册
服务发现是利用watch
的特性,首先获取一遍需要的服务信息,保存在本地,然后给这个服务节点添加watch
,监视变化和更新。
etcd
服务注册
服务注册是利用了etcd租约的特性。
首先创建一个定时的租约,比如10秒,20秒等。
然后带租约存储服务信息,不断的续期租约,当服务不可用时,租约过期,服务数据就会被删除,就相当于心跳保活了。
服务注册
服务发现和zookepper类似,是利用了etcd的watch
的特性,首先获取一遍需要的服务的信息,再监视变化和更新。
看原理是不是都很简单呢?主要是怎么实现呢?下面附上完整代码供参考: