引言
在手写RPC框架中,注册中心是一个关键的组件,用于管理和维护服务提供者列表。为了实现有效的服务注册、发现和路由,注册中心需要借助一些机制来实现服务信息的共享、健康状态的监测以及变化的监听。本篇博客将介绍手写RPC框架中注册中心实现的三个重要机制:共享机制、心跳机制和监听机制。
共享机制:
共享机制是指注册中心提供一个数据结构,用于存储服务提供者的信息,并且可以被多个节点访问和更新。常见的共享机制包括内存、数据库和分布式存储等。
以下是共享机制的几个关键步骤:
- 注册中心创建一个共享数据结构,如哈希表或数据库表,用于存储服务提供者的信息。
- 服务提供者在启动时将自身的信息注册到共享数据结构中。
- 消费者通过访问共享数据结构获取可用的服务提供者列表。
共享机制的作用:实现服务信息的存储和共享,确保各个节点之间获取到一致的服务提供者列表。
共享机制的实现
在MapRemoteRegister中使用文件进行共享,服务提供方将调用方需要使用的接口名和url地址通过map键值对存在文件中,以此进行文件的共享
public class MapRemoteRegister implements Serializable{
//之所以用List存URL是因为Provider可能提供多个服务
private static Map<String, List<URL>> map = new HashMap<>();
//注册时将url加入到List中去
public static void regist(String interfaceName, URL url) {
List<URL> list = map.get(interfaceName);
if (list == null) {
list = new ArrayList<>();
}
list.add(url);
map.put(interfaceName, list);
//存到map里之后再写到文件里面去,实现map的共享
saveFile();
}
public static List<URL> get(String interfaceName) {
//拿之前先读文件从里面拿出来
map=getFile();
return map.get(interfaceName);
}
//两台机器,通过Map共享文件(共享机制)
private static void saveFile() {
try {
FileOutputStream fileOutputStream = new FileOutputStream("/temp.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
//将map写入文件
objectOutputStream.writeObject(map);
} catch (IOException e) {
e.printStackTrace();
}
}
private static Map<String, List<URL>> getFile() {
try {
FileInputStream fileInputStream = new FileInputStream("/temp.txt");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
return (Map<String, List<URL>>) objectInputStream.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
心跳机制
心跳机制是指服务提供者定期向注册中心发送心跳,并表明自己的健康状态。注册中心根据心跳信息来判断服务提供者的可用性和健康状况。
以下是心跳机制的几个关键步骤:
- 服务提供者启动时,定期向注册中心发送心跳请求。
- 注册中心接收到心跳请求后,更新服务提供者的健康状态信息。
- 消费者从注册中心获取服务提供者列表时,只选择健康状态良好的服务提供者。
心跳机制的作用:实现服务提供者的健康监测,及时发现不可用的服务提供者并从可用的列表中剔除。
监听机制
监听机制是指消费者订阅注册中心的变化通知,以获取最新的服务提供者列表。当注册中心服务提供者列表发生变化时,将通知已订阅的消费者进行更新。
以下是监听机制的几个关键步骤:
- 消费者启动时,向注册中心订阅服务提供者列表的变化通知。
- 注册中心在服务提供者列表发生变化时,广播变化消息给已订阅的消费者。
- 消费者收到变化通知后,更新本地的服务提供者列表。
监听机制的作用:实时获取服务提供者列表的变化情况,保证消费者始终调用到可用的服务提供者。
总结
- 在手写RPC框架中,注册中心实现了共享机制、心跳机制和监听机制来确保服务提供者信息的存储和共享、健康状态的监测以及变化的监听。
- 通过共享机制,服务提供者的信息可以被多个节点访问和更新;
- 通过心跳机制,注册中心可以判断服务提供者的健康状态;
- 通过监听机制,消费者可以实时获取最新的服务提供者列表。
这三个机制协同工作,使得分布式系统能够实现高效、稳定和可扩展的服务注册、发现和路由。