服务不再是A-B,B-C 那么简单,而是错综复杂的微小服务的调用
这个时候我们可以借助于Zookeeper的基本特性来实现一个注册中心,什么是注册中心,顾名思
义,就是让众多的服务,都在Zookeeper中进行注册,啥是注册,注册就是把自己的一些服务信
息,比如IP,端口,还有一些更加具体的服务信息,都写到 Zookeeper节点上, 这样有需要的
服务就可以直接从zookeeper上面去拿,怎么拿呢? 这时我们可以定义统一的名称,比如,
User-Service, 那所有的
用户服务
在
启动
的时候,都在User-Service 这个节点下面创建一个子节
点(临时节点),这个子节点保持唯一就好,代表了每个服务实例的唯一标识,有依赖
用户服务
的比如
Order-Service
就可以通过
User-Service
这个父节点,就能获取所有的User-Service 子
节点,并且获取所有的子节点信息(IP,端口等信息),拿到子节点的数据后
Order-Service
可
以对其进行缓存,然后实现一个客户端的负载均衡,同时还可以对这个User-Service 目录进行
监听, 这样有新的节点加入,或者退出,
Order-Service
都能收到通知,这样
Order-Service
重
新获取所有子节点,且进行数据更新。这个用户服务的子节点的类型为临时节点。 第一节课有
讲过,Zookeeper中临时节点生命周期是和SESSION绑定的,如果SESSION超时了,对应的节
点会被删除,被删除时,Zookeeper 会通知对该节点父节点进行监听的客户端, 这样对应的客户
端又可以刷新本地缓存了。当有新服务加入时,同样也会通知对应的客户端,刷新本地缓存,要
达到这个目标需要客户端重复的注册对父节点的监听。这样就实现了服务的自动注册和自动退
出。
Spring Cloud 生态也提供了Zookeeper注册中心的实现,这个项目叫 Spring Cloud
Zookeeper 下面我们来进行实战。
项目说明:
为了简化需求,我们以两个服务来进行讲解,实际使用时可以举一反三
user-center : 用户服务
product-center: 产品服务
用户调用产品服务,且实现客户端的负载均衡,产品服务自动加入集群,自动退出服务。