在基于Netty的自定义RPC的案例基础上,进行改造。基于Zookeeper实现简易版服务的注册与发现机制
要求完成改造版本:
1. 启动2个服务端,可以将IP及端口信息自动注册到Zookeeper
2. 客户端启动时,从Zookeeper中获取所有服务提供端节点信息,客户端与每一个服务端都建立连接
3. 某个服务端下线后,Zookeeper注册列表会自动剔除下线的服务端节点,客户端与下线的服务端断开连接
4. 服务端重新上线,客户端能感知到,并且与重新上线的服务端重新建立连接
(二)需求二在“编程题一”的基础上,实现基于Zookeeper的简易版负载均衡策略
要求完成改造版本:
Zookeeper记录每个服务端的最后一次响应时间,有效时间为5秒,5s内如果该服务端没有新的请求,响应时间清零或失效。(如下图所示)
当客户端发起调用,每次都选择最后一次响应时间短的服务端进行服务调用,如果时间一致,随机选取一个服务端进行调用,从而实现负载均衡
二. 解题思路 (一)在虚拟机Linux上搭建zookeeper伪集群 (二)在本地windows创建两个Rpc服务端服务端一: ip:127.0.0.1, RPC绑定端口号:8899, 内置tomcat端口号:8081,服务端名:provider
服务端一: ip:192.168.1.61, RPC绑定端口号:8898,内置tomcat端口号:8082,服务端名:Otherprovider
(三)服务端改造流程服务端改造比较容易,只是将自身的IP及端口号注册到zookeeper中
与zookeeper的连接会话放到SpringBoot启动类中,在服务端SpringBoot所有初始化工作完成后开始与zookeeper连接
连接完成后,将连接会话及服务器IP、端口号做为参数调用新创建的ZkServer类的初始化方法
调用初始化方法后,再调用ZkServer类的zkUp方法向zookeeper进行节点的创建及服务端IP、端口号内容注册
读取已创建的节点,判断服务端是否在zookeeper注册成功,并返回判断信息。
当服务端Spring容器销毁时(也就是服务端关闭下线),重写destroy方法,删除zookeeper上所创建的临时节点。(临时节点在会话结束后也会自动消失)
1、启动流程
2、请求流程
三. 完整代码完整代码(请点击)



