手写RPC框架(五)整合Zookeeper
手写RPC框架(五)整合Zookeeper
Zookeeper是一种分布式程序协调服务,RPC框架中使用Zookeeper可以更加灵活,不仅可以存储
我们采用开源Zookeeper客户端ZKClient,它对ZookeeperAPI进行了封装,实现了超时重连,Watcher反复注册等功能。
-
引入ZKClient
com.101tec zkclient 0.11 -
Zookeeper读写数据
public class ZKUtil { private static final String ZK_ADDRESS = "127.0.0.1:2181"; private static ZkClient client; static { client = new ZkClient(ZK_ADDRESS); } public static void writeData(String path, String data) { if (!client.exists(path)) { client.createPersistent(path, true); } client.writeData(path, data, -1); } public staticT readData(String path) { return client.readData(path); } } -
服务注册中心数据处理
public class RegisterCenter { private static final String ROOT = "/irpc"; private static final String PROVIDER_PATH = "%s/%s/provider"; private static final String CONSUMER_PATH = "%s/%s/consumer"; public static void registerProvider(RpcRegisterEntity entity) { ZKUtil.writeData(String.format(PROVIDER_PATH, ROOT, entity.getInterfaceClassFullName()), JSON.toJSONString(entity)); } public static void registerConsumer(RpcRegisterEntity entity) { ZKUtil.writeData(String.format(CONSUMER_PATH, ROOT, entity.getInterfaceClassFullName()), JSON.toJSONString(entity)); } public staticT getProviderData(String path) { return ZKUtil.readData(String.format(PROVIDER_PATH, ROOT, path)); } public static T getConsumerData(String path) { return ZKUtil.readData(String.format(CONSUMER_PATH, ROOT, path)); } } -
服务注册、发现
RegisterCenter.registerProvider(rpcRegisterEntity);//提供者 RegisterCenter.registerConsumer(rpcRegisterEntity);//消费者